2011-04-30 45 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