Multithreading Win32事件与条件变量

Multithreading Win32事件与条件变量,multithreading,winapi,Multithreading,Winapi,我正在编写一个应用程序,需要使用win32线程实现生产者-消费者队列。到目前为止,一切进展顺利,但我面临着一个难题:我应该使用还是向消费者发出添加了某些内容的信号?我看到过可以使用任何一种方法的例子。就我个人而言,对于我的队列,我需要能够同时等待多个信号(一个项目推送信号和一个退出信号)。只有一个生产者和一个消费者 每种方法的优缺点是什么?考虑到我的要求,你会推荐什么?为什么?谢谢 通常,读取的实现方式如下: WaitForSingleObject(evt); // 1 EnterCriti

我正在编写一个应用程序,需要使用win32线程实现生产者-消费者队列。到目前为止,一切进展顺利,但我面临着一个难题:我应该使用还是向消费者发出添加了某些内容的信号?我看到过可以使用任何一种方法的例子。就我个人而言,对于我的队列,我需要能够同时等待多个信号(一个项目推送信号和一个退出信号)。只有一个生产者和一个消费者


每种方法的优缺点是什么?考虑到我的要求,你会推荐什么?为什么?谢谢

通常,读取的实现方式如下:

WaitForSingleObject(evt);   // 1
EnterCriticalSection(&cs);  // 2
//... fetching data from the queue
LeaveCriticalSection(&cs);  // 3
但对于条件变量(特殊类型的事件),可以替换第1行和第2行 通过调用
SleepConditionVariableCS()
以原子方式执行1和2个操作


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

通常,读取的实现方式如下:

WaitForSingleObject(evt);   // 1
EnterCriticalSection(&cs);  // 2
//... fetching data from the queue
LeaveCriticalSection(&cs);  // 3
但对于条件变量(特殊类型的事件),可以替换第1行和第2行 通过调用
SleepConditionVariableCS()
以原子方式执行1和2个操作


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

注意:这在XP上不存在。由于他需要同时等待多个信号,WaitForMultipleObjects将比WaitForSingleObject更好。鉴于此项目确实需要在Windows XP上运行,我想这使选择变得容易。谢谢顺便说一句:通常“项目推送信号和退出信号”组合成单个事件“队列状态更改”或类似事件<代码>布尔队列::读取(数据和数据);//如果队列已关闭,则返回false注意:XP上不存在此选项。由于他需要同时等待多个信号,WaitForMultipleObjects将比WaitForSingleObject更好。鉴于此项目确实需要在Windows XP上运行,我想这会使选择更容易。谢谢顺便说一句:通常“项目推送信号和退出信号”组合成单个事件“队列状态更改”或类似事件<代码>布尔队列::读取(数据和数据);//如果队列已关闭,则返回false