public void Calling_ReleaseReadLock_should_release_lock() { using var readWriteLock = new TinyReadWriteLock(Guid.NewGuid().ToString(), 1); readWriteLock.AcquireReadLock(); readWriteLock.IsReaderLockHeld.ShouldBeTrue(); readWriteLock.ReleaseReadLock(); readWriteLock.IsReaderLockHeld.ShouldBeFalse(); }
public void Calling_AcquireWriteLock_then_AquireReadLock_should_wait_for_other_lock() { var lockId = Guid.NewGuid().ToString(); using var readWriteLock1 = new TinyReadWriteLock(lockId, 2); using var readWriteLock2 = new TinyReadWriteLock(lockId, 2); readWriteLock1.AcquireWriteLock(); var readLockTask = Task.Run(() => readWriteLock2.AcquireReadLock()); WaitForTaskToStart(readLockTask); readWriteLock1.IsWriterLockHeld.ShouldBeTrue(); readWriteLock2.IsReaderLockHeld.ShouldBeFalse(); readWriteLock1.ReleaseWriteLock(); readLockTask.Wait(); readWriteLock1.IsWriterLockHeld.ShouldBeFalse(); readWriteLock2.IsReaderLockHeld.ShouldBeTrue(); }