2010-05-11 90 views
4

基本上我需要替换条件变量和SleepConditionVariableCS,因为它只支持Vista和UP。 (For C++)Win32事件vs信号量

有人建议使用Semaphore,我也发现CreateEvent。

基本上,我需要等待WaitForSingleObject上的线程,直到一个或多个其他线程告诉我有什么事要做。

在哪种情况下,我应该使用信号量还是赢运动?

谢谢

回答

3

在你的情况下,我会自己使用一个事件。当您希望线程开始时发出事件信号。工作完成:)

编辑:信号量和事件之间的差异归结为内部计数。如果有多个ReleaseSemaphores,那么2个WaitForSingleObjects也将被释放。事件本质上是布尔型的。如果两个不同的地方同时发生信号事件,则等待将被释放,并且将被重新设置为未标记(取决于是否具有自动或手动重置)。如果您需要同时从多个位置发送信号并等待线程运行两次,则此事件行为可能导致死锁。

3

在一般情况下,在Windows上替换条件变量非常困难且容易出错。或者:

  1. 使用其他人的实现(例如Boost.Thread)。
  2. 重新思考你正试图解决的问题,看看Win32是否可以做到这一点。根据你的描述,一个事件可能就足够了,但是如果服务员需要由其他线程设置的一些条件表达式来触发,而不仅仅是一个信号,你最好回到选项1.