Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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");
        }