LockCookie Structure
Defines the lock that implements single-writer/multiple-reader semantics. This is a value type.
Assembly: mscorlib (in mscorlib.dll)
| Name | Description | |
|---|---|---|
![]() | Equals(LockCookie) | Indicates whether the current instance is equal to the specified LockCookie. |
![]() | Equals(Object) | Indicates whether a specified object is a LockCookie and is equal to the current instance.(Overrides ValueType.Equals(Object).) |
![]() | GetHashCode() | Returns the hash code for this instance.(Overrides ValueType.GetHashCode().) |
![]() | GetType() | |
![]() | ToString() | Returns the fully qualified type name of this instance.(Inherited from ValueType.) |
| Name | Description | |
|---|---|---|
![]() ![]() | Equality(LockCookie, LockCookie) | Indicates whether two LockCookie structures are equal. |
![]() ![]() | Inequality(LockCookie, LockCookie) | Indicates whether two LockCookie structures are not equal. |
The following example shows how to request a reader lock, upgrade the reader lock to a writer lock, and save the LockCookie. It then uses the LockCookie to downgrade to a reader lock again.
This code is part of a larger example provided for the ReaderWriterLock class.
// The complete code is located in the ReaderWriterLock class topic. using System; using System.Threading; public class Example { static ReaderWriterLock rwl = new ReaderWriterLock(); // Define the shared resource protected by the ReaderWriterLock. static int resource = 0;
// Requests a reader lock, upgrades the reader lock to the writer // lock, and downgrades it to a reader lock again. static void UpgradeDowngrade(int timeOut) { try { rwl.AcquireReaderLock(timeOut); try { // It's safe for this thread to read from the shared resource. Display("reads resource value " + resource); Interlocked.Increment(ref reads); // To write to the resource, either release the reader lock and // request the writer lock, or upgrade the reader lock. Upgrading // the reader lock puts the thread in the write queue, behind any // other threads that might be waiting for the writer lock. try { LockCookie lc = rwl.UpgradeToWriterLock(timeOut); try { // It's safe for this thread to read or write from the shared resource. resource = rnd.Next(500); Display("writes resource value " + resource); Interlocked.Increment(ref writes); } finally { // Ensure that the lock is released. rwl.DowngradeFromWriterLock(ref lc); } } catch (ApplicationException) { // The upgrade request timed out. Interlocked.Increment(ref writerTimeouts); } // If the lock was downgraded, it's still safe to read from the resource. Display("reads resource value " + resource); Interlocked.Increment(ref reads); } finally { // Ensure that the lock is released. rwl.ReleaseReaderLock(); } } catch (ApplicationException) { // The reader lock request timed out. Interlocked.Increment(ref readerTimeouts); } }
Available since 1.1
This type is thread safe.


