LockHelpers.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System;
  2. using System.Threading;
  3. namespace BestHTTP.PlatformSupport.Threading
  4. {
  5. public struct ReadLock : IDisposable
  6. {
  7. private ReaderWriterLockSlim rwLock;
  8. private bool locked;
  9. public ReadLock(ReaderWriterLockSlim rwLock)
  10. {
  11. this.rwLock = rwLock;
  12. this.locked = this.rwLock.IsReadLockHeld;
  13. if (!this.locked)
  14. this.rwLock.EnterReadLock();
  15. }
  16. public void Dispose()
  17. {
  18. if (!this.locked)
  19. this.rwLock.ExitReadLock();
  20. }
  21. }
  22. public struct WriteLock : IDisposable
  23. {
  24. private ReaderWriterLockSlim rwLock;
  25. private bool locked;
  26. public WriteLock(ReaderWriterLockSlim rwLock)
  27. {
  28. this.rwLock = rwLock;
  29. this.locked = rwLock.IsWriteLockHeld;
  30. if (!locked)
  31. this.rwLock.EnterWriteLock();
  32. }
  33. public void Dispose()
  34. {
  35. if (!locked)
  36. this.rwLock.ExitWriteLock();
  37. }
  38. }
  39. }