0

我在问这个问题:在多线程套接字服务器上使用事件

我已经实现了一个ConcurrentQueue想法,它需要避免多线程问题。这样做时,我注意到与标准的唯一区别Queue在于Dequeue()方法,要求提供out参数。

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

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

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

所以我认为我可以接受一个简单的队列吗?

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

4

1 回答 1

4

在我的游戏中,我有一个主线程来处理我的游戏逻辑,然后每个玩家都有另一个线程来完成监听、序列化和发送数据的工作。

因此,您最终可能会遇到这样的情况,即在您将项目出列的确切时间,您还将一个项目入队到另一个线程中。在这种情况下,排队的项目可能会由于不安全的代码Dequeue而丢失(特别是更新可能不同步的类成员)。此外,调整后备数组的大小可能会导致项目丢失......

你需要一个ConcurrentQueue.

于 2017-10-24T09:55:09.370 回答