【发布时间】:2011-11-11 22:47:41
【问题描述】:
我想检查Semaphore 的状态以查看它是否已发出信号(因此,如果已发出 t 信号,我可以释放它)。我怎样才能做到这一点?
EDIT1:
我有两个线程,一个会等待信号量,另一个应该释放Semaphore。问题是当第一个线程没有等待它时,第二个线程可能会多次调用Release()。所以第二个线程应该检测到如果它调用Release(),它是否会产生任何错误(如果你试图释放一个信号量,如果没有人在等待它,它会产生一个错误)。我怎样才能做到这一点?我知道我可以使用一个标志来做到这一点,但它很难看。有没有更好的办法?
【问题讨论】:
-
如何定义信号量的“信号”?在一般情况下,最多 M 个线程中的 N 个已进入其中。有信号吗?
-
Release 释放一个槽,它不需要线程处于等待模式。如果在没有人阻塞时释放它,则意味着下一个调用者将直接通过而不会阻塞。另一个线程应该只在需要释放时才调用释放。它不应该只是重复调用 release,否则不会有任何限制。
标签: c# .net multithreading semaphore