使线程中的数据流对所有其他线程可读

时间:2018-09-16 17:32:09

标签: c++ multithreading queue pthreads posix

我必须在多线程服务器实例的客户端下分发数据流,客户端线程只需要读取即可。这意味着我有一个线程,数据从该线程发出,而所有其他线程都需要读取该数据(它们不再需要更改),以便他们可以将数据发送到客户端。

我尝试了线程安全队列(https://blog.chrisd.info/a-simple-thread-safe-queue-for-use-in-multi-threaded-c-applications/),但是当我在多个客户端上尝试使用该线程时,只有第二个客户端或新客户端接收到了数据。

我该如何解决问题?是否有可以在多个线程中使用的线程安全队列?

Luick

1 个答案:

答案 0 :(得分:2)

根据您的描述,通常的队列语义将不起作用,因为您实际上是想在所有线程都获得元素后才弹出元素,而不是在第一次访问时就弹出元素。因此,您有几种选择:

  • 为每个客户端线程维护一个队列,并且生产者线程始终将数据推送到每个客户端线程中。通过将数据包装到Map中,您可以减少内存开销并创建语义,即在最后一个客户端处理完数据后销毁数据。
  • 只有一个队列,但每个线程有多个尾指针。尽管这在处理线程生成/终止时会变得很复杂。但是您尚未说明系统中存在哪些约束-线程数是固定的还是动态的。