public void TestCompareAndSet() { AtomicInt64 ai = new AtomicInt64(1); assertTrue(ai.CompareAndSet(1, 2)); assertTrue(ai.CompareAndSet(2, -4)); assertEquals(-4, ai.Value); assertFalse(ai.CompareAndSet(-5, 7)); assertFalse((7 == ai.Value)); assertTrue(ai.CompareAndSet(-4, 7)); assertEquals(7, ai.Value); }
public void TestCompareAndSetInMultipleThreads() { AtomicInt64 ai = new AtomicInt64(1); Thread t = new Thread(() => { while (!ai.CompareAndSet(2, 3)) { Thread.Yield(); } }); try { t.Start(); assertTrue(ai.CompareAndSet(1, 2)); t.Join(LONG_DELAY_MS); assertFalse(t.IsAlive); assertEquals(ai.Value, 3); } catch (Exception e) { unexpectedException(); } }