//------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------

        #region Constructors

        internal ReaderWriterLockWrapper()
        {
            // ideally we'd like to use the NoRecursion policy, but RWLock supports
            // recursion so we allow recursion for compat.  It's needed for at least
            // one pattern - a weak event manager for an event A that delegates to
            // a second event B via a second weak event manager.  There's at least
            // one instance of this within WPF (CanExecuteChanged delegates to
            // RequerySuggested), and it could also happen in user code.
            _rwLock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
            _awr    = new AutoWriterRelease(this);
            _arr    = new AutoReaderRelease(this);
            _defaultSynchronizationContext = new NonPumpingSynchronizationContext();
        }
示例#2
0
        private void Initialize(bool useLegacyMemoryBehavior)
        {
            if (useLegacyMemoryBehavior)
            {
                _awr = new AutoWriterRelease(this);
                _arr = new AutoReaderRelease(this);
            }
            else
            {
                _awrc = new AutoWriterReleaseClass(this);
                _arrc = new AutoReaderReleaseClass(this);

                _enterReadAction  = _rwLock.EnterReadLock;
                _exitReadAction   = _rwLock.ExitReadLock;
                _enterWriteAction = _rwLock.EnterWriteLock;
                _exitWriteAction  = _rwLock.ExitWriteLock;
            }
        }
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------

        #region Constructors

        internal ReaderWriterLockWrapper()
        {
            _rwLock = new ReaderWriterLock();
            _awr    = new AutoWriterRelease(_rwLock);
            _arr    = new AutoReaderRelease(_rwLock);
        }
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------

        #region Constructors

        internal ReaderWriterLockWrapper()
        {
            _rwLock = new ReaderWriterLock();
            _awr = new AutoWriterRelease(_rwLock);
            _arr = new AutoReaderRelease(_rwLock);
        }