2010-05-26 141 views
2

對於單生產者,單消費者應該使用BlockingCollection還是ConcurrentQueue?對於單生產者,我應該使用BlockingCollection還是ConcurrentQueue?

關注:

  • 我的目標是把車停在100個項目的時間和發送它們作爲一批下一步。
  • 如果我使用ConcurrentQueue,當不需要完成任何工作時,我必須手動使它睡着。否則,我會浪費CPU旋轉週期。
  • 如果我使用BlockingQueue,並且只有99個工作項目,它可以無限期地阻止,直到第100個項目到達。

http://msdn.microsoft.com/en-us/library/system.collections.concurrent.aspx

+0

這是一個單生產者,單消費者的情況。換句話說,一個線程正在寫入隊列,另一個線程正在讀取隊列。 – 2010-06-02 01:10:44

回答

1

你也許可以用任何脫身。雖然就像你說的那樣,如果使用ConcurrentQueue,那麼你必須在隊列爲空時執行旋轉等待。如果你期望生產者和消費者之間的差距很短,那可能並不是那麼糟糕。最後,我認爲你會發現BlockingCollection更適合你的情況。這是生產者 - 消費者模式選擇的數據結構。有幾種不同的方法可以解決無限期的等待問題。

  • 使用標記值作爲消費者中的停止指示符。插入隊列中的null值在這裏可以很好地工作。
  • 利用CancellationToken機制來解除Take方法。
相關問題