/** compareAndSet succeeds in changing value if equal to expected else fails */ public void testCompareAndSet() { AtomicLong ai = new AtomicLong(1); assertTrue(ai.compareAndSet(1, 2)); assertTrue(ai.compareAndSet(2, -4)); assertEquals(-4, ai.get()); assertFalse(ai.compareAndSet(-5, 7)); assertFalse((7 == ai.get())); assertTrue(ai.compareAndSet(-4, 7)); assertEquals(7, ai.get()); }
/** * @param pid PID of the other party. * @param size Size of the space. * @return Token pair. */ private IgnitePair<String> inOutToken(int pid, int size) { while (true) { long idx = tokIdxGen.get(); if (tokIdxGen.compareAndSet(idx, idx + 2)) return F.pair( new File(tokDir, TOKEN_FILE_NAME + idx + "-" + pid + "-" + size).getAbsolutePath(), new File(tokDir, TOKEN_FILE_NAME + (idx + 1) + "-" + pid + "-" + size) .getAbsolutePath()); } }
/** compareAndSet in one thread enables another waiting for value to succeed */ public void testCompareAndSetInMultipleThreads() { final AtomicLong ai = new AtomicLong(1); Thread t = new Thread( new Runnable() { public void run() { 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.get(), 3); } catch (Exception e) { unexpectedException(); } }
@Override public String getLID(DSLAMSource source) throws IOException, TimeoutADManClientException, ADManClientException { // Update counters: String res = null; { invokeSyncBeginCount.incrementAndGet(); long runningCount = invokeSyncRunningCount.incrementAndGet(); long runningCountMax = invokeSyncRunningCountMax.get(); if (runningCount > runningCountMax) { invokeSyncRunningCountMax.compareAndSet(runningCountMax, runningCount); } synchronized (invokeBeginFrequencyCounter) { invokeBeginFrequencyCounter.increment(); } } try { res = super.getLID(source); } catch (Throwable ex) { invokeSyncEndFailureCount.incrementAndGet(); } finally { // Update counters: { invokeSyncEndCount.incrementAndGet(); invokeSyncRunningCount.decrementAndGet(); synchronized (invokeEndFrequencyCounter) { invokeEndFrequencyCounter.increment(); } } } return res; }