Search in sources :

Example 6 with AtomicMarkableReference

use of java.util.concurrent.atomic.AtomicMarkableReference in project j2objc by google.

the class AtomicMarkableReferenceTest method testCompareAndSetInMultipleThreads2.

/**
 * compareAndSet in one thread enables another waiting for mark value
 * to succeed
 */
public void testCompareAndSetInMultipleThreads2() throws Exception {
    final AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
    Thread t = new Thread(new CheckedRunnable() {

        public void realRun() {
            while (!ai.compareAndSet(one, one, true, false)) Thread.yield();
        }
    });
    t.start();
    assertTrue(ai.compareAndSet(one, one, false, true));
    t.join(LONG_DELAY_MS);
    assertFalse(t.isAlive());
    assertSame(one, ai.getReference());
    assertFalse(ai.isMarked());
}
Also used : AtomicMarkableReference(java.util.concurrent.atomic.AtomicMarkableReference)

Example 7 with AtomicMarkableReference

use of java.util.concurrent.atomic.AtomicMarkableReference in project j2objc by google.

the class AtomicMarkableReferenceTest method testGetSet.

/**
 * get returns the last values of reference and mark set
 */
public void testGetSet() {
    boolean[] mark = new boolean[1];
    AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
    assertSame(one, ai.getReference());
    assertFalse(ai.isMarked());
    assertSame(one, ai.get(mark));
    assertFalse(mark[0]);
    ai.set(two, false);
    assertSame(two, ai.getReference());
    assertFalse(ai.isMarked());
    assertSame(two, ai.get(mark));
    assertFalse(mark[0]);
    ai.set(one, true);
    assertSame(one, ai.getReference());
    assertTrue(ai.isMarked());
    assertSame(one, ai.get(mark));
    assertTrue(mark[0]);
}
Also used : AtomicMarkableReference(java.util.concurrent.atomic.AtomicMarkableReference)

Example 8 with AtomicMarkableReference

use of java.util.concurrent.atomic.AtomicMarkableReference in project j2objc by google.

the class AtomicMarkableReferenceTest method testCompareAndSet.

/**
 * compareAndSet succeeds in changing values if equal to expected reference
 * and mark else fails
 */
public void testCompareAndSet() {
    boolean[] mark = new boolean[1];
    AtomicMarkableReference ai = new AtomicMarkableReference(one, false);
    assertSame(one, ai.get(mark));
    assertFalse(ai.isMarked());
    assertFalse(mark[0]);
    assertTrue(ai.compareAndSet(one, two, false, false));
    assertSame(two, ai.get(mark));
    assertFalse(mark[0]);
    assertTrue(ai.compareAndSet(two, m3, false, true));
    assertSame(m3, ai.get(mark));
    assertTrue(mark[0]);
    assertFalse(ai.compareAndSet(two, m3, true, true));
    assertSame(m3, ai.get(mark));
    assertTrue(mark[0]);
}
Also used : AtomicMarkableReference(java.util.concurrent.atomic.AtomicMarkableReference)

Aggregations

AtomicMarkableReference (java.util.concurrent.atomic.AtomicMarkableReference)8