2011-04-30 44 views
1

我正在编写win32 library,我需要使用win32线程实现生产者 - 消费者队列。到目前为止,一切进展顺利,但我面临着一个困境:我应该使用events还是condition variables向消费者发出信号,表明已添加了某些内容?我见过可以使用任何一个的例子。我个人对于我的队列需要一次等待多个信号的能力(项目推送信号,并且退出信号)。只有一个生产者和一个消费者。Win32事件与条件变量

每个的优点和缺点是什么?根据我的要求,你会推荐什么?为什么?谢谢!

回答

1

通常读数被实现为:

WaitForSingleObject(evt); // 1 
EnterCriticalSection(&cs); // 2 
//... fetching data from the queue 
LeaveCriticalSection(&cs); // 3 

但随着条件变量(特殊类型的事件)线1和2可以通过SleepConditionVariableCS(),做1点2的操作原子单呼来代替 。

在高容量的情况下(频繁的R/W操作),这会给你带来一些好处。

+0

注意:这在XP上不存在。 – Mehrdad 2011-04-30 03:34:29

+0

因为他需要一次等待多个信号,所以WaitForMultipleObjects会比WaitForSingleObject好。 – 2011-04-30 04:44:04

+0

考虑到这个项目确实需要在Windows XP上运行,我想这使得选择变得容易。谢谢! – 2011-04-30 18:39:34