[Test] public void HasWaitersReturnTrueWhenThreadIsWaitingElseFalse([Values(true, false)] bool isFair) { _lock = new ReentrantLock(true); ICondition c = _lock.NewCondition(); ThreadManager.StartAndAssertRegistered( "T1", delegate { using (_lock.Lock()) { Assert.IsFalse(_lock.HasWaiters(c)); Assert.That(_lock.GetWaitQueueLength(c), Is.EqualTo(0)); c.Await(); } }); Thread.Sleep(Delays.Short); _lock.Lock(); Assert.IsTrue(_lock.HasWaiters(c)); Assert.AreEqual(1, _lock.GetWaitQueueLength(c)); c.Signal(); _lock.Unlock(); Thread.Sleep(Delays.Short); _lock.Lock(); Assert.IsFalse(_lock.HasWaiters(c)); Assert.AreEqual(0, _lock.GetWaitQueueLength(c)); _lock.Unlock(); ThreadManager.JoinAndVerify(); }
public void GetWaitQueueLengthReturnsNumberOfThreads(bool isFair) { _lock = new ReentrantLock(isFair); ICondition c = _lock.NewCondition(); ThreadManager.StartAndAssertRegistered( "T1", delegate { using (_lock.Lock()) { Assert.IsFalse(_lock.HasWaiters(c)); Assert.AreEqual(0, _lock.GetWaitQueueLength(c)); c.Await(); } }); Thread.Sleep(Delays.Short); ThreadManager.StartAndAssertRegistered( "T2", delegate { using (_lock.Lock()) { Assert.IsTrue(_lock.HasWaiters(c)); Assert.AreEqual(1, _lock.GetWaitQueueLength(c)); c.Await(); } }); try { Thread.Sleep(Delays.Short); _lock.Lock(); Assert.IsTrue(_lock.HasWaiters(c)); Assert.AreEqual(2, _lock.GetWaitQueueLength(c)); c.SignalAll(); _lock.Unlock(); Thread.Sleep(Delays.Short); _lock.Lock(); Assert.IsFalse(_lock.HasWaiters(c)); Assert.AreEqual(0, _lock.GetWaitQueueLength(c)); _lock.Unlock(); } finally { ThreadManager.JoinAndVerify(); } }
public void HasWaitersChokesWhenNotLocked(bool isFair) { _lock = new ReentrantLock(isFair); ICondition c = _lock.NewCondition(); _lock.HasWaiters(c); }
public void HasWaitersChokesWhenNotOwned([Values(true, false)] bool isFair) { _lock = new ReentrantLock(isFair); ICondition c = _lock.NewCondition(); ReentrantLock lock2 = new ReentrantLock(isFair); lock2.HasWaiters(c); }
public void HasWaitersChokesOnNullParameter([Values(true, false)] bool isFair) { _lock = new ReentrantLock(isFair); _lock.HasWaiters(null); }