我是相當新的pthread編程,並試圖讓我的腦袋周圍cond_signal
& mutex_lock
。我正在寫一個示例程序,它有一個生產者線程和兩個消費線程。一個生產者,兩個消費者和使用pthread_cond_signal&pthread_mutex_lock
生產者和第一個消費者之間有一個隊列,生產者和第二個消費者之間有一個不同的隊列。我的生產者基本上是一個通信接口,它從網絡讀取數據包,並基於配置的過濾器將數據包傳遞給任一消費者。
我正嘗試使用pthread_cond_signal & pthread_mutex_lock生產者和消費者之間的以下方式。
[在生產者]
0)等待分組到達
1)鎖定互斥pthread_mutex_lock(&cons1Mux)
2)所述分組添加到消費者隊列的尾部
3 )信號消費者1過程pthread_cond_signal(&msgForCons1)
4)解鎖互斥鎖pthread_mutex_lock(&cons1Mux)
5)轉到步驟0
[在消費者]
1)鎖定互斥pthread_mutex_lock(&cons1Mux)
2)等待信號pthread_cond_wait(&msgForCons1,&cons1Mux)
3)喚醒之後,讀出的數據包
4)從隊列中刪除。
5)解鎖互斥pthread_mutex_unlock(&cons1Mux)
6)轉到步驟1
是上述步驟是否正確?如果一個切換從消費者線程剛好在步驟5之後發生到生產者線程,那麼即使消費者還沒有開始監聽該信號,生產者是否有可能發信號通知分組正在等待。會造成「錯過信號」嗎?
這些步驟是否還有其他問題?
所以你建議在消費者,步驟2(從我的問題)應該是等待信號,直到隊列爲空。 在此先感謝。 – 2010-06-27 13:08:06
呃,不完全。我會說:「如果隊列是空的,然後等待;否則,如果隊列不是空的,處理隊列項目」。 – timday 2010-06-27 18:29:18
謝謝。我的意思是一樣的。應該有更好的措辭。 – 2010-07-08 14:44:27