public void BossWorkerDemo() { int n = 10; Latch startPermit = new Latch(); Semaphore wait = new Semaphore(-(n - 1)); Worker [] workers = new Worker[n]; for (int i = 0; i < n; ++i) { workers[i] = new Worker(startPermit, wait); new Thread(new ThreadStart(workers[i].Work)).Start(); } // very slow main initialization ... // ... parse configuration // ... initialize other resources used by workers startPermit.Release(); // now it is our turn to wait for workers wait.Acquire(); for (int i = 0; i < n; ++i) { Assert.IsTrue(workers[i].worked); } }
public void UsingLikeAMutex() { Semaphore semaphore = new Semaphore(1); Latch latch = new Latch(); Helper helper = new Helper(semaphore, latch); Thread thread = new Thread(new ThreadStart(helper.Go)); semaphore.Acquire(); thread.Start(); latch.Acquire(); Assert.IsFalse(helper.gone); semaphore.Release(); thread.Join(); Assert.IsTrue(helper.gone, "not gone"); }