C语言 事件和信号量之间的差异



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

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

你需要在特定

上下文中了解它吗?这将有助于使其更好地理解。

通常,信号量是执行操作必须获取的一些令牌,例如锁定受保护以防止并发访问的执行单元。

事件是消息/订阅者模式中的函数。

所以它们有些相关,但甚至没有可比性。

您可能面临的一个典型的令人困惑/复杂的情况是,一个事件触发了两个不同的订阅者,而不是希望同时访问某些资源。他们应该请求信号量令牌,并在使用后释放它,让其他订阅者试一试。

最新更新