有一個ConcurrentQueue實例和兩個併發訪問它的線程。一個線程繼續排列項目(可能會在100微秒內排列幾個項目)和其他線程TryDequeue逐項並做一些處理。有一個ManualResetEvent的信號的任何項目入隊後的處理線程(這倒不涉及到這個問題)ConcurrentQueue中的Enqueue和TryDequeue
在這種情況下,有沒有錯誤的順序給ConcurrentQueue添加項目的可能性。我知道這是線程安全的,但只是想確保當入隊和出隊速度更快時它是否不會影響項目的順序。
有一個ConcurrentQueue實例和兩個併發訪問它的線程。一個線程繼續排列項目(可能會在100微秒內排列幾個項目)和其他線程TryDequeue逐項並做一些處理。有一個ManualResetEvent的信號的任何項目入隊後的處理線程(這倒不涉及到這個問題)ConcurrentQueue中的Enqueue和TryDequeue
在這種情況下,有沒有錯誤的順序給ConcurrentQueue添加項目的可能性。我知道這是線程安全的,但只是想確保當入隊和出隊速度更快時它是否不會影響項目的順序。
絕對沒有辦法,項目可能會出現故障。
首先,根據定義,隊列實施FIFO順序:您將元素放在一端,並將其放在另一端。由於這是通過單一生產者單一消費者模式完成的,所以它絕對安全。
+1隊列爲FIFO – 2012-02-29 13:40:31
@都鐸王朝:+1謝謝! – ABCD 2012-02-29 20:53:47
這是一個隊列!如果它可以重新排序條目,他們會把它稱爲ConcurrentBag或其他東西。生產者 - 消費者隊列流水線上亂序的唯一方法是如果有多個消費者線程。 '
我認爲ConcurrentShoppingTrolly是一個更好的名字 – cost 2013-01-17 18:40:46
'有一個ManualResetEvent在任何項目入隊之後發信號通知處理線程':( – 2012-02-29 12:30:23
這是一個隊列!如果它可以重新排序入口,他們會稱它爲ConcurrentBingoMachine,ConcurrentLottery,ConcurrentShoppingTrolley或其他東西。生產者 - 消費者隊列管道上的順序是,如果有多個消費者線程 – 2012-02-29 12:35:10
Aparrently,有一個'ConcurrentBag'類,所以,不是ConcurrentBingoMachine:(( – 2012-02-29 12:39:30