我问这与此问题有关:Using events on multithreading socket server
我已经实现了ConcurrentQueue
认为需要避免多线程问题。在执行此操作时,我注意到标准Queue
的唯一区别在于Dequeue()
方法,要求out
参数。
这让我觉得唯一的保护是在对象出列的线程内,这是真的吗?
在我的游戏中,我有一个主线程处理我的游戏逻辑,然后每个玩家的另一个线程正在执行收听,序列化和发送数据的工作。
所以我的ConcurrentQueue
将被不同的线程排队并出列,但只有一个并且总是相同的将调用enqueue或dequeue。
所以我认为我对一个简单的队列会好吗?
从多个线程同时调用ConcurrentQueue
时才需要Dequeue()
吗?
答案 0 :(得分:3)
在我的游戏中,我有一个主线程处理我的游戏逻辑,然后每个玩家的另一个线程正在执行收听,序列化和发送数据的工作。
因此,您最终可能会出现这样的情况:在您将某个项目出列的确切时间,您还会将项目排入其他线程。在这种情况下,由于the unsafe code in Dequeue
(特别是更新可能不同步的类成员),排队的项目可能会丢失。此外,调整后备阵列的大小可能会导致项目丢失......
您需要ConcurrentQueue
。