我刚刚意识到Windows平台有 SignalObjectAndWait
API函数。但是已经有 SetEvent
和 WaitForSingleObject
了。您可以将它们一起使用以实现与SignalObjectAndWait
相同的目标。
基于MSDN,SignalObjectAndWait
比单独调用SetEvent
和WaitForSingleObject
效率更高。它还指出:
我不完全理解这句话,但是看来效率并不是我们需要SignalObjectAndWait
的唯一原因。有人能提供SetEvent
+ WaitForSingleObject
无法提供SignalObjectAndWait
提供的功能的情况吗?
最佳答案
我的理解是,该单一功能在避免以下情况的方式上更加高效。
当您SetEvent
和另一个[esp。更高的优先级]线程正在等待此事件,因此线程调度程序可能会将控制权从信令线程上移开。当线程收到控制权时,它所做的唯一的事情是下面的WaitForSingleObject
调用,因此浪费了上下文切换来处理这么小的事情。
通过使用SignalObjectAndWait
,您可以通过说“嘿,无论如何我都将等待另一个事件,来提示内核,因此,如果对您有所帮助,请不要通过来回上下文切换而过度反弹”。
关于c++ - 如果有SetEvent和WaitForSingleObject,SignalObjectAndWait的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18289229/