Unity_Web/Assets/Best HTTP/Source/PlatformSupport/Threading/LockHelpers.cs

47 lines
1.0 KiB
C#

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();
}
}
}