public void CompareExpectedValueAndSetNewValue() { AtomicBoolean ai = new AtomicBoolean( true ); Assert.AreEqual( true, ai.Value ); Assert.IsTrue( ai.CompareAndSet( true, false ) ); Assert.AreEqual( false, ai.Value ); Assert.IsTrue( ai.CompareAndSet( false, false ) ); Assert.AreEqual( false, ai.Value ); Assert.IsFalse( ai.CompareAndSet( true, false ) ); Assert.IsFalse( ( ai.Value ) ); Assert.IsTrue( ai.CompareAndSet( false, true ) ); Assert.AreEqual( true, ai.Value ); }
public void CompareExpectedValueAndSetNewValueInMultipleThreads() { AtomicBoolean ai = new AtomicBoolean( true ); var t = ThreadManager.StartAndAssertRegistered("T1",delegate { while (!ai.CompareAndSet(false, true)) Thread.Sleep(Delays.Short); } ); Assert.IsTrue( ai.CompareAndSet( true, false ), "Value" ); ThreadManager.JoinAndVerify(); Assert.IsFalse( t.IsAlive, "Thread is still alive." ); Assert.IsTrue( ai.Value ); }