private static void SemaphoreTestRelease()
    {
        switch (new Random().Next(2))
        {
        case 0:
        {
            Stopwatch watch            = new Stopwatch();
            int       timeUntilRelease = new Random().Next(8000);
            Console.WriteLine("\t" + "\t" + "\t" + Thread.CurrentThread.Name + ": I'm going to wait " + timeUntilRelease + " milliseconds to release a token.");
            watch.Start();
            while (watch.ElapsedMilliseconds < timeUntilRelease)
            {
            }
            Console.WriteLine("\t" + "\t" + "\t" + "\t" + Thread.CurrentThread.Name + ": I'm releasing a token now!");
            _testSemaphore.Release();
            break;
        }

        case 1:
        {
            Console.WriteLine("\t" + "\t" + "\t" + "\t" + "\t" + Thread.CurrentThread.Name + ": Haha! I'm not going to release!");
            _notGoingToRelease = true;
            while (_notGoingToRelease)
            {
            }
            break;
        }
        }
    }
示例#2
0
    private static void SemaphoreTestRelease()
    {
        Stopwatch watch            = new Stopwatch();
        int       timeUntilRelease = new Random().Next(8000);

        Console.WriteLine("\t" + "\t" + "\t" + Thread.CurrentThread.Name + ": I'm going to wait " + timeUntilRelease + " milliseconds to release a token.");
        watch.Start();
        while (watch.ElapsedMilliseconds < timeUntilRelease)
        {
        }
        Console.WriteLine("\t" + "\t" + "\t" + "\t" + Thread.CurrentThread.Name + ": I'm releasing a token now!");
        _testSemaphore.Release();
    }
 private void Releasebutler()
 {
     Console.WriteLine("\t\t\t" + Thread.CurrentThread.Name + ": Thank you, butler. You may serve another.");
     _butler.Release();
     Thread.Sleep(_rand.Next(100, 1500));
 }