ReaderWriterLock rwLock = new ReaderWriterLock(); ListsharedList = new List (); void ReadSharedResource() { rwLock.AcquireReaderLock(Timeout.Infinite); try { foreach(int i in sharedList) { Console.WriteLine(i); } } finally { rwLock.ReleaseReaderLock(); } } void WriteSharedResource(int value) { rwLock.AcquireWriterLock(Timeout.Infinite); try { sharedList.Add(value); } finally { rwLock.ReleaseWriterLock(); } }
ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim(); ListReaderWriterLockSlim is an alternative to ReaderWriterLock that provides better performance in most scenarios. The code is very similar to the previous example, but we use EnterReadLock and EnterWriteLock methods instead of AcquireReaderLock and AcquireWriterLock. The ReaderWriterLock and ReaderWriterLockSlim classes are part of the System.Threading package in .NET Framework.sharedList = new List (); void ReadSharedResource() { rwLock.EnterReadLock(); try { foreach(int i in sharedList) { Console.WriteLine(i); } } finally { rwLock.ExitReadLock(); } } void WriteSharedResource(int value) { rwLock.EnterWriteLock(); try { sharedList.Add(value); } finally { rwLock.ExitWriteLock(); } }