事件通常只有两种状态,未发出信号或已发出信号。信号量具有计数,如果计数为零,则视为未发出信号,如果计数不为零,则视为已发出信号。在Windows的情况下,ReleaseSemaphore()会增加信号量计数,而使用信号量句柄的WaitForSingleObject(...)将等待(除非超时参数设置为零)非零计数,然后在返回之前减少计数。
你需要知道它在特定的上下文中吗?这有助于使其更容易理解。通常,信号量是一些必须获取才能执行操作的令牌,例如受保护免受并发访问的执行单元上的锁定。事件是消息/订阅模式中的函数。因此,它们有点相关但根本不可比较。您可能会遇到的典型混乱/复杂情况是,一个事件触发两个不同的订阅者,然后希望同时访问某些资源。他们应该请求一个信号量令牌,并在使用后释放它,以让另一个订阅者进行。