public void CompareAndSetInMultipleThreads2() { AtomicStampedReference <T> ai = new AtomicStampedReference <T>(one, 0); Thread t = new Thread(delegate() { while (!ai.CompareAndSet(one, one, 1, 2)) { Thread.Sleep(0); } }); t.Start(); Assert.IsTrue(ai.CompareAndSet(one, one, 0, 1)); t.Join(Delays.Long); Assert.IsFalse(t.IsAlive); Assert.AreEqual(ai.Value, one); Assert.AreEqual(ai.Stamp, 2); }
public void CompareAndSet() { int mark; AtomicStampedReference <T> ai = new AtomicStampedReference <T>(one, 0); Assert.AreEqual(one, ai.GetValue(out mark)); Assert.AreEqual(0, ai.Stamp); Assert.AreEqual(0, mark); Assert.IsTrue(ai.CompareAndSet(one, two, 0, 0)); Assert.AreEqual(two, ai.GetValue(out mark)); Assert.AreEqual(0, mark); Assert.IsTrue(ai.CompareAndSet(two, m3, 0, 1)); Assert.AreEqual(m3, ai.GetValue(out mark)); Assert.AreEqual(1, mark); Assert.IsFalse(ai.CompareAndSet(two, m3, 1, 1)); Assert.AreEqual(m3, ai.GetValue(out mark)); Assert.AreEqual(1, mark); }