public bool TryDowngradeToReadLock(TimeSpan timeout, out IReadLockAcquisition readLockAcquisition) { var disposables = (IDisposable)null; var ok = Owner.TryLockChildren(LockTypes.Read, timeout, out disposables); if (ok) { ok = Owner.InternalLock.TryEnterReadLock(timeout.Milliseconds); if (ok) { readLockAcquisition = new ReadLockAcquisition(Owner, disposables); return true; } else { disposables?.Dispose(); } } readLockAcquisition = null; return false; }
public override bool TryAcquireReadLock(TimeSpan timeout, out IReadLockAcquisition readLockAcquisition) { var sw = Stopwatch.StartNew(); var r = base.TryAcquireReadLock(timeout, out readLockAcquisition); sw.Stop(); SUBJECT__Read.OnNext(sw.Elapsed.TotalMilliseconds); return r; }
public bool TryDowngradeToReadLock(TimeSpan timeout, out IReadLockAcquisition readLockAcquisition) { if(Owner.InternalLock.TryEnterReadLock(timeout.Milliseconds)) { readLockAcquisition = new ReadLockAcquisition(Owner); return true; } else { readLockAcquisition = null; return false; } }
public bool TryAcquireReadLock(TimeSpan timeout, out IReadLockAcquisition readLockAcquisition) { if (InternalLock.RecursionPolicy == LockRecursionPolicy.NoRecursion && (InternalLock.IsReadLockHeld || InternalLock.IsUpgradeableReadLockHeld || InternalLock.IsWriteLockHeld)) { readLockAcquisition = null; return false; } if (InternalLock.TryEnterReadLock(timeout)) { readLockAcquisition = new ReadLockAcquisition(owner: this); return true; } else { readLockAcquisition = null; return false; } }
public virtual bool TryAcquireReadLock(TimeSpan timeout, out IReadLockAcquisition readLockAcquisition) { if (InternalLock.RecursionPolicy == LockRecursionPolicy.NoRecursion && (InternalLock.IsReadLockHeld || InternalLock.IsUpgradeableReadLockHeld || InternalLock.IsWriteLockHeld)) { readLockAcquisition = null; return false; } var disposables = (IDisposable)null; var ok = TryLockChildren(LockTypes.Read, timeout, out disposables); if (ok) { ok = InternalLock.TryEnterReadLock(timeout); if (ok) { readLockAcquisition = new ReadLockAcquisition(owner: this, disposeWhenDone: LockChildren(LockTypes.Read)); return true; } else { disposables?.Dispose(); } } readLockAcquisition = null; return false; }