事件和信号量的区别

3

我已经搜索过这个主题,但是无法很好地理解。事件和信号量之间的主要区别是什么?


谷歌搜索标题显示:“约有231,000个结果”。DCV。 - Martin James
1
我投票关闭此问题,因为它是一个Google奴隶请求独特作业答案的问题,与主题无关。 - Martin James
2个回答

3

事件通常只有两种状态,未发出信号或已发出信号。信号量具有计数,如果计数为零,则视为未发出信号,如果计数不为零,则视为已发出信号。在Windows的情况下,ReleaseSemaphore()会增加信号量计数,而使用信号量句柄的WaitForSingleObject(...)将等待(除非超时参数设置为零)非零计数,然后在返回之前减少计数。


1
你需要知道它在特定的上下文中吗?这有助于使其更容易理解。
通常,信号量是一些必须获取才能执行操作的令牌,例如受保护免受并发访问的执行单元上的锁定。
事件是消息/订阅模式中的函数。
因此,它们有点相关但根本不可比较。
您可能会遇到的典型混乱/复杂情况是,一个事件触发两个不同的订阅者,然后希望同时访问某些资源。他们应该请求一个信号量令牌,并在使用后释放它,以让另一个订阅者进行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接