此代码工作正常,它获取了一个信号量条目
static void Main(string[] args)
{
Semaphore semaphore = new Semaphore(1, 1, "sem1");
semaphore.WaitOne();
Console.WriteLine("Press any Key to release semaphore");
Console.ReadKey();
semaphore.Release();
}
但是这要等待WaitOne()方法。
static void Main(string[] args)
{
Semaphore semaphore = new Semaphore(0, 1, "sem1");
semaphore.WaitOne();
Console.WriteLine("Press any Key to release semaphore");
Console.ReadKey();
semaphore.Release();
}
我在这里缺少基本的东西吗?谢谢
答案 0 :(得分:0)
您正在将可用请求的数量设置为零,然后尝试获取信号量。由于没有可用的请求,该线程将挂在信号量上,并等待其他线程释放它。
将信号量视为整数S
。当您WaitOne
时,会发生两件事
S
大于零,则将其减小一。S
等于零,请暂停线程直到其不为零。在第一个示例中,将其初始化为一个,然后获取。 在第二个中,将其初始化为零,以便线程等待。由于没有其他线程可以释放信号量,因此它会无限期地等待。