12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using System;
- using System.Threading;
- namespace BestHTTP.PlatformSupport.Threading
- {
- public struct ReadLock : IDisposable
- {
- private ReaderWriterLockSlim rwLock;
- private bool locked;
- public ReadLock(ReaderWriterLockSlim rwLock)
- {
- this.rwLock = rwLock;
- this.locked = this.rwLock.IsReadLockHeld;
- if (!this.locked)
- this.rwLock.EnterReadLock();
- }
- public void Dispose()
- {
- if (!this.locked)
- this.rwLock.ExitReadLock();
- }
- }
- public struct WriteLock : IDisposable
- {
- private ReaderWriterLockSlim rwLock;
- private bool locked;
- public WriteLock(ReaderWriterLockSlim rwLock)
- {
- this.rwLock = rwLock;
- this.locked = rwLock.IsWriteLockHeld;
- if (!locked)
- this.rwLock.EnterWriteLock();
- }
- public void Dispose()
- {
- if (!locked)
- this.rwLock.ExitWriteLock();
- }
- }
- }
|