/** 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();
   }
 }
Пример #4
0
  @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;
  }