2011-02-07 118 views
2

這是一個設計問題。pthread多線程

我有6個線程總數和兩個FIFO隊列。 6個線程是:

  • 2生產者產生「進入」(這是無符號的int)和排隊到隊列1
  • 2半消費者從隊列1和排隊出隊進入隊列2
  • 2消費者從隊列2
  • 出列

條目總數爲500

我的問題是:我怎麼能做到這2半的消費者和消費者的活着,而所有500項通過隊列1牛逼路由o隊列2並出隊?對於生產者線程,這很容易,因爲我可以維護全局條目數。

所以如果total_entries = 500,從例程返回(產生線程死亡)。我想用一種有效的方式而不是一些破解。

環境:Linux,pthread,C/C++。

回答

3

在「500條目」未知的典型線程應用程序中,我認爲對於某些總體控制過程,在工作完成後停止所有線程將更爲常見。

對於您的具體問題,您可以將EOF的概念添加到您的FIFO中,以便讀者可以區分「現在無法使用」和「再次無法使用」。這可能與最終價值一樣簡單(也許0對於您的線索不是合法價值,並且可以表示這一點)。

然後你的生產者「關閉」它的FIFO結束,當它變爲空時,半消費者看到EOF並關閉它們的下一個FIFO的結束。就像使用真實文件一樣,您需要參考計數來了解兩個生產者完成時間或兩個半消費者完成時的情況。