在两个单独的线程之间共享一个队列,用于在 UDP 广播服务器中接收和处理数据

Posted

技术标签:

【中文标题】在两个单独的线程之间共享一个队列,用于在 UDP 广播服务器中接收和处理数据【英文标题】:Sharing a Queue between two Separate Threads for Receiving and Processing data in UDP Broadcast Server 【发布时间】:2013-03-15 05:44:45 【问题描述】:

我创建了一个广播服务器,它一次必须有 10 个客户端。它必须能够一次从 10 个客户端读取数据并通过Broadcast Message to all the Clients 回复。为了让这种沟通更快,我决定让two Separate Threads at Server Side.

一个线程 1 将专门用于连续接收数据并将数据放入队列中。然后这个数据被另一个 Thread2 从队列中读取并完成处理。

即队列必须在 Thread1 和 Thread2 之间共享。

我怎样才能有效地做到这一点?这两个线程之间如何共享队列?

如果 Thread1 在同一个队列中写入而 Thread2 正在读取呢?

任何帮助将不胜感激。

【问题讨论】:

线程间共享数据,请看question。为防止线程读写相同的共享数据,需要synchronize访问共享数据。 我会在我尝试后告诉你它是如何工作的,但看起来很有帮助:) 谢谢 :) 【参考方案1】:

主要思想是“消费者”等待直到有数据可用,“生产者”在数据可用时通知。这可以使用条件变量简单有效地完成。看看this article——作者实现了这样一个队列,每一步都有详细的解释。

【讨论】:

以上是关于在两个单独的线程之间共享一个队列,用于在 UDP 广播服务器中接收和处理数据的主要内容,如果未能解决你的问题,请参考以下文章

进程间通讯

线程池-参数篇:2.队列

进程间的几种通信方式的比较和线程间的几种

RTX线程通信之——消息队列

RTX线程通信之——消息队列

Disruptor极速队列