什么时候需要ConcurrentQueue?

时间:2017-10-24 09:52:03

标签: c# .net multithreading concurrent-queue

我问这与此问题有关:Using events on multithreading socket server

我已经实现了ConcurrentQueue认为需要避免多线程问题。在执行此操作时,我注意到标准Queue的唯一区别在于Dequeue()方法,要求out参数。

这让我觉得唯一的保护是在对象出列的线程内,这是真的吗?

在我的游戏中,我有一个主线程处理我的游戏逻辑,然后每个玩家的另一个线程正在执行收听,序列化和发送数据的工作。

所以我的ConcurrentQueue将被不同的线程排队并出列,但只有一个并且总是相同的将调用enqueue或dequeue。

所以我认为我对一个简单的队列会好吗?

从多个线程同时调用ConcurrentQueue时才需要Dequeue()吗?

1 个答案:

答案 0 :(得分:3)

  

在我的游戏中,我有一个主线程处理我的游戏逻辑,然后每个玩家的另一个线程正在执行收听,序列化和发送数据的工作。

因此,您最终可能会出现这样的情况:在您将某个项目出列的确切时间,您还会将项目排入其他线程。在这种情况下,由于the unsafe code in Dequeue(特别是更新可能不同步的类成员),排队的项目可能会丢失。此外,调整后备阵列的大小可能会导致项目丢失......

您需要ConcurrentQueue