在以下代码中:
Semaphore semaphore = new Semaphore(3, 3);
semaphore.WaitOne();
int count = semaphore.Release();
System.Diagnostics.Debug.WriteLine($"Count = {count}");
我将初始计数设置为3,然后将WaitOne()(递减为2),然后将Release()(递增回为3)。
那为什么是2? 我在这里想念什么?
答案 0 :(得分:1)
答案 1 :(得分:1)
我为什么要以前的计数?
简而言之,当前计数是没有意义的,该值可能已更改,然后您才能对其进行任何操作。因此,它代替了(正确的是)它为您提供了唯一的真实事实来源,即先前的计数(发布时)。
如果您真的很想要当前计数,则可以通过NtQuerySemaphore查询它,这是未记录的Win API调用。尽管实际上您不需要依赖于此,但是信号量的机制是您在任何正常使用中都需要的。
您也可以创建自己的互锁计数器,但是再次,这确实不是必须的