[英]Why doesn't ConcurrentQueue<T>.Count return 0 when IsEmpty == true?
[英]When is a ConcurrentQueue needed?
我問這個與此問題有關: 在多線程套接字服務器上使用事件
我實現了ConcurrentQueue
認為需要它來避免多線程問題。 這樣做時,我注意到與標准Queue
的唯一區別在於Dequeue()
方法,要求使用out
參數。
這使我認為唯一的保護是在使對象出隊的線程內,這是真的嗎?
在我的游戲中,我有一個主線程處理我的游戲邏輯,然后每個玩家有另一個線程正在執行偵聽,序列化和發送數據的工作。
因此,我的ConcurrentQueue
將由不同的線程入隊和出隊,但只有一個並且始終相同,將調用入隊或出隊。
因此,我認為通過一個簡單的隊列就可以了嗎?
僅在從多個線程同時調用Dequeue()
時才需要ConcurrentQueue
嗎?
在我的游戲中,我有一個主線程處理我的游戲邏輯,然后每個玩家有另一個線程正在執行偵聽,序列化和發送數據的工作。
因此,您可能會遇到這樣的情況,即在您准確地將一個項目從隊列中取出時,您也將一個項目放入另一個線程中。 在這種情況下,排隊的項目可能會丟失,由於在不安全的代碼Dequeue
(具體更新類成員,可以得到不同步)。 此外,調整后備數組的大小可能會導致項目丟失...
您需要一個ConcurrentQueue
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.