我正在写一个win32 library,我需要使用win32线程实现一个生产者 - 消费者队列。到目前为止,一切进展顺利,但我面临两难选择:我应该使用events或condition variables向消费者发出已添加内容的信号吗?我见过可以使用其中任何一个的例子。就我的队列而言,我需要能够同时等待多个信号(项目推送信号和退出信号)。只有一个生产者和一个消费者。
每种优缺点有哪些?根据我的要求,您会推荐什么?为什么?谢谢!
答案 0 :(得分:1)
通常阅读实现为:
WaitForSingleObject(evt); // 1
EnterCriticalSection(&cs); // 2
//... fetching data from the queue
LeaveCriticalSection(&cs); // 3
但是对于条件变量(特殊类型的事件),可以替换第1行和第2行
通过单个调用SleepConditionVariableCS()
,以原子方式执行1和2操作。
在大批量情况下(频繁的R / W操作),这将为您带来一些好处。