public void Test_OddEvenWithSemaphore() { OddEvenWorker worker = new OddEvenWorker(); Thread oddThread = new Thread(() => { worker.PrintOddValuesSemaphore(20); }); Thread evenThread = new Thread(() => { worker.PrintEvenValuesSemaphore(20); }); oddThread.Name = "OddTh"; evenThread.Name = "EvenTh"; Semaphore semaphore = new Semaphore(1, 4, "MySemaphore"); semaphore.WaitOne(); oddThread.Start(); evenThread.Start(); // don't let them go until semaphore released semaphore.Release(); oddThread.Join(); evenThread.Join(); Assert.IsTrue(true); }