public UniqueLockSemaphore(ref UniqueLockSemaphore other) { _semaphore = other._semaphore; _isLocked = other._isLocked; other._isLocked = false; other._semaphore = null; }
public void Dispose() { if (_isLocked) { _semaphore.Unlock(); _isLocked = false; _semaphore = null; } }
public static Result MakeUniqueLockWithPin <T>(out IUniqueLock uniqueLock, SemaphoreAdaptor semaphore, ref ReferenceCountedDisposable <T> objectToPin) where T : class, IDisposable { UnsafeHelpers.SkipParamInit(out uniqueLock); UniqueLockSemaphore tempUniqueLock = default; try { Result rc = TryAcquireCountSemaphore(out tempUniqueLock, semaphore); if (rc.IsFailure()) { return(rc); } uniqueLock = new UniqueLockWithPin <T>(ref tempUniqueLock, ref objectToPin); return(Result.Success); } finally { tempUniqueLock.Dispose(); } }
public UniqueLockSemaphore(SemaphoreAdaptor semaphore) { _semaphore = semaphore; _isLocked = false; }
public static Result TryAcquireCountSemaphore(out UniqueLockSemaphore uniqueLock, SemaphoreAdaptor semaphore) { UniqueLockSemaphore tempUniqueLock = default; try { tempUniqueLock = new UniqueLockSemaphore(semaphore); if (!tempUniqueLock.TryLock()) { UnsafeHelpers.SkipParamInit(out uniqueLock); return(ResultFs.OpenCountLimit.Log()); } uniqueLock = new UniqueLockSemaphore(ref tempUniqueLock); return(Result.Success); } finally { tempUniqueLock.Dispose(); } }