繁体   English   中英

Win32事件与信号量

[英]Win32 Event vs Semaphore

基本上我需要替换Condition Variable和SleepConditionVariableCS,因为它只支持Vista和UP。 (对于C ++)

有人建议使用Semaphore,我也找到了CreateEvent。

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

在哪种情况下我应该使用信号量与胜利事件?

谢谢

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

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

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

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

如果可能的话,使用boost :: condition_variable 我之前一直在这条路上(参见microsoft.public.win32.programmer.kernel上的 msg),Win32事件API不够用; 使用事件有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM