Windows的SetEvent的确切行为是什么?

时间:2012-04-24 13:03:38

标签: c++ windows synchronization

我有一个自动重置事件对象,有一个线程正在等待它。如果现在我调用SetEvent,可以保证在SetEvent返回时事件对象是无信号的吗?

我有两个以A-B-A-B -...方式运行的线程。一旦A唤醒B,A将开始等待B.如果我可以在发出信号之后立即等待同一事件对象,那么......我可以保存一个事件对象。

如果你问为什么我不只是使用一个单独的线程,它们就处于不同的过程中。

2 个答案:

答案 0 :(得分:4)

当服务员被释放时,事件变得无信号。在调用SetEvent之前,无法保证释放服务员。

答案 1 :(得分:0)

一般来说,没有。到那时,另一个线程可能已经发出信号,如果没有线程等待,它将保持设置状态。在只有两个线程的情况下,那么也许你会好的。

为什么你甚至会考虑这种“优化”。使用两个事件将更容易调试。

多线程,线程间和进程间通信很难实现。你不应该添加更多的复杂功能。