Win32事件与条件变量

时间:2011-04-30 02:18:34

标签: multithreading winapi

我正在写一个win32 library,我需要使用win32线程实现一个生产者 - 消费者队列。到目前为止,一切进展顺利,但我面临两难选择:我应该使用eventscondition variables向消费者发出已添加内容的信号吗?我见过可以使用其中任何一个的例子。就我的队列而言,我需要能够同时等待多个信号(项目推送信号和退出信号)。只有一个生产者和一个消费者。

每种优缺点有哪些?根据我的要求,您会推荐什么?为什么?谢谢!

1 个答案:

答案 0 :(得分:1)

通常阅读实现为:

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

但是对于条件变量(特殊类型的事件),可以替换第1行和第2行 通过单个调用SleepConditionVariableCS(),以原子方式执行1和2操作。

在大批量情况下(频繁的R / W操作),这将为您带来一些好处。