Windows 即使没有线程等待此信号,条件_变量的信号状态是否仍然存在?

Windows 即使没有线程等待此信号,条件_变量的信号状态是否仍然存在?,windows,multithreading,winapi,Windows,Multithreading,Winapi,在Pthreads中,如果向条件变量发送信号,并且pthread\u cond\u wait()上没有线程阻塞,则此信号将丢失 在Windows中使用SetEvent()向事件发送信号时,此事件将保持信号状态,直到另一个线程等待此事件对象 使用MSDN()上以下句子中的follow?发出信号的条件变量有哪些行为 唤醒一个线程类似于在唤醒所有线程时设置自动重置事件 线程与手动重置事件类似,但更可靠(请参阅 详情请参见PulseEvent) 我推断该行为与pthread库中的行为相同。但正如上面的评

在Pthreads中,如果向条件变量发送信号,并且
pthread\u cond\u wait()
上没有线程阻塞,则此信号将丢失

在Windows中使用SetEvent()向事件发送信号时,此事件将保持信号状态,直到另一个线程等待此事件对象


使用MSDN()上以下句子中的follow?

发出信号的条件变量有哪些行为

唤醒一个线程类似于在唤醒所有线程时设置自动重置事件 线程与手动重置事件类似,但更可靠(请参阅 详情请参见PulseEvent)


我推断该行为与pthread库中的行为相同。但正如上面的评论所说,如果您计划以标准方式使用条件变量,这一方面实际上并不重要。

这是一个未记录的实现细节,可能会发生更改。因此,无论哪种情况,代码都必须正确运行。正如Raymond已经指出的那样,如果你知道这是自动发生的

如果出于某种原因您没有使用通常的模式,那么您应该假设唤醒将丢失,但请记住,等待条件变量的线程可能会在任何时候因任何原因或无原因而被唤醒:

条件变量受到虚假唤醒的影响(那些与显式唤醒无关的)


这意味着,如果您假设唤醒丢失了,但事实上它没有丢失,那么就代码而言,它看起来就像一个虚假的唤醒。如果代码正确处理虚假唤醒,它也将正确处理此场景。

这无关紧要,因为等待前需要验证条件。如果在没有服务员的情况下唤醒条件变量,那么下一个服务员将验证该条件,查看是否满足该条件,并且一开始决不调用
SleepConditionVariable