LMU ☀️ CMSI 673
CONCURRENT AND DISTRIBUTED PROGRAMMING
HOMEWORK #2 PARTIAL ANSWERS
docs/research/java-semaphores/barging.txt
In class Semaphore

  tryAcquire() and tryAcquire(n)

    each call Semaphore.Sync.nonfairTryAcquireShared(1)

    which appears to busy wait until enough permits are available,
    returning immediately if there are enough available.  Therefore
    barging is possible.

  tryAcquire(t, unit) and tryAcquire(n, t, unit)

    each call java.util.concurrent.locks.AbstractQueuedSynchronizer
                .tryAcquireSharedNanos(1, unit.toNanos(t))

    which calls AbstractQueuedSynchronizer.doAcquireShared
    which clearly queues the thread if not enough permits are available.
    Therefore no barging is possible, even if the timeout is 0.
src/edu/lmu/cs/demos/threads/Summer.java
 Missing content
src/edu/lmu/cs/demos/threads/SumTester.java
 Missing content
src/edu/lmu/cs/demos/threads/DiningPhilosophers.java

Sorry, I didn't do the graphics...

 Missing content
src/edu/lmu/cs/demos/threads/MandelbrotDemo.java
 Missing content
src/edu/lmu/cs/demos/threads/MandelbrotPanel.java
 Missing content