public void Dispose() { if (lockObject != null) { // Такое бывает под тестами DeadlockMonitor.Exit(lockObject); } }
/// <summary> /// Освободить блокировку над объектом на чтение /// </summary> void IRwLockObject.ExitReadLock() => DeadlockMonitor.ExitReadLock(this);
/// <summary> /// Попытаться захватить блокировку над объектом на запись с таймаутом /// </summary> bool IRwLockObject.TryEnterWriteLock(int timeout) => DeadlockMonitor.TryEnterWriteLock(this, timeout);
/// <summary> /// Захватить блокировку над объектом а запись /// </summary> void IRwLockObject.EnterWriteLock() => DeadlockMonitor.EnterWriteLock(this);
/// <summary> /// Попытаться захватить блокировку над объектом на чтение с возможностью повышения с таймаутом /// </summary> bool IRwLockObject.TryEnterUpgradeableReadLock(int timeout) => DeadlockMonitor.TryEnterUpgradeableReadLock(this, timeout);
/// <summary> /// Захватить блокировку над объектом на чтение с возможностью повышения /// </summary> void IRwLockObject.EnterUpgradeableReadLock() => DeadlockMonitor.EnterUpgradeableReadLock(this);
/// <summary> /// Захватить блокировку над объектом на запись /// </summary> /// <returns> /// Disposable-токен блокировки /// </returns> public WriteLockDisposableToken WriteLock() => DeadlockMonitor.WriteLock(this);
/// <summary> /// Захватить блокировку над объектом на чтение с возможностью повышения /// </summary> /// <returns> /// Disposable-токен блокировки /// </returns> public UpgradableReadLockDisposableToken UpgradableReadLock() => DeadlockMonitor.UpgradableReadLock(this);
/// <summary> /// Захватить блокировку над объектом на чтение /// </summary> /// <returns> /// Disposable-токен блокировки /// </returns> public ReadLockDisposableToken ReadLock() => DeadlockMonitor.ReadLock(this);
public void Dispose() { DeadlockMonitor.ExitWriteLock(rwls); }
public void Dispose() { DeadlockMonitor.ExitReadLock(rwls); }
public void Dispose() { DeadlockMonitor.ExitUpgradeableReadLock(rwls); }