我刚刚意识到Windows平台有 SignalObjectAndWait API函数。但是已经有 SetEvent WaitForSingleObject 了。您可以将它们一起使用以实现与SignalObjectAndWait相同的目标。

基于MSDNSignalObjectAndWait比单独调用SetEventWaitForSingleObject效率更高。它还指出:



我不完全理解这句话,但是看来效率并不是我们需要SignalObjectAndWait的唯一原因。有人能提供SetEvent + WaitForSingleObject无法提供SignalObjectAndWait提供的功能的情况吗?

最佳答案

我的理解是,该单一功能在避免以下情况的方式上更加高效。



当您SetEvent和另一个[esp。更高的优先级]线程正在等待此事件,因此线程调度程序可能会将控制权从信令线程上移开。当线程收到控制权时,它所做的唯一的事情是下面的WaitForSingleObject调用,因此浪费了上下文切换来处理这么小的事情。

通过使用SignalObjectAndWait,您可以通过说“嘿,无论如何我都将等待另一个事件,来提示内核,因此,如果对您有所帮助,请不要通过来回上下文切换而过度反弹”。

关于c++ - 如果有SetEvent和WaitForSingleObject,SignalObjectAndWait的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18289229/

10-11 10:50