//------------------------------------------------------ // // 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(); }
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); }