This class defines a lock that allows multiple readers, but only one writer. A thread can acquire a lock by calling AcquireReaderLock( ) or AcquireWriterLock( ) . ReleaseReaderLock( ) and ReleaseWriterLock( ) release the specific locks. Calling ReleaseReaderLock( ) on a writer lock releases both the writer lock and the reader lock. However, calling ReleaseWriterLock( ) on a reader lock throws a System.ApplicationException . ReleaseLock( ) causes any lock to be released, but it returns a LockCookie , which represents the type of lock that RestoreLock can use to obtain the same lock. UpgradeToWriterLock( ) upgrades a reader lock to a writer lock, and returns a LockCookie representing the original reader lock. Pass that cookie to DowngradeDromWriterLock( ) to restore the original reader lock. public sealed class ReaderWriterLock { // Public Constructors public ReaderWriterLock ( ); // Public Instance Properties public bool IsReaderLockHeld {get; } public bool IsWriterLockHeld {get; } public int WriterSeqNum {get; } // Public Instance Methods public void AcquireReaderLock (int millisecondsTimeout ); public void AcquireReaderLock (TimeSpan timeout ); public void AcquireWriterLock (int millisecondsTimeout ); public void AcquireWriterLock (TimeSpan timeout ); public bool AnyWritersSince (int seqNum ); public void DowngradeFromWriterLock (ref LockCookie lockCookie ); public LockCookie ReleaseLock ( ); public void ReleaseReaderLock ( ); public void ReleaseWriterLock ( ); public void RestoreLock (ref LockCookie lockCookie ); public LockCookie UpgradeToWriterLock (int millisecondsTimeout ); public LockCookie UpgradeToWriterLock (TimeSpan timeout ); } |