2010-01-19 85 views
0

可能重複:
Creating a blocking Queue<T> in .NET?線程問題

我有典型的生產者和消費者線程問題。但唯一的區別是,生產者可以建立5個物品的緩衝區,然後等待一些物品被消耗。

什麼是在c#中實現這個最好的解決方案。 目前我使用信號量來實現它,但製作者似乎非常迅速地建立了超過100個項目的緩衝區。我沒有語法來處理將緩衝區限制爲5個項目。我正在考慮使用一個靜態整數 - 讓生產者增加它 - 當它達到5時,製片人進入睡眠狀態。讓消費者減少它並喚醒生產者。

回答

5

爲什麼不使用有界隊列(大小爲5),如果隊列已滿則使用生產者塊?

0

您可以使用一個隊列來確保所有數據包的先入先出。然而,既然你提到隊列被快速填充,我想你可能想增加隊列限制到更大的數量。你提到你將使用睡眠來避免排隊超過5個數據,我覺得製片人的製作速度遠高於消費者。所以您可能需要根據需求優化隊列大小。

此外,您可以有簡單的事件來發信號通知消費者線程隊列已滿並需要清除。在我看來,信號量變得冗長乏味。再次,這只是個人意見。