使线程可以读取所有其他线程的数据流

问题描述 投票:0回答:1

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

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

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

Luick

c++ multithreading queue pthreads posix
1个回答
1
投票

从你所描述的,通常的队列语义将不起作用,因为你实际上想要在所有线程获得它时弹出元素,而不是在第一次访问时。所以你有几个选择:

  • 每个客户端线程维护一个队列,生产者线程总是将数据推送到每个客户端线程中。通过将数据包装到std::shared_ptr中,您可以减少内存开销并创建语义,其中数据在最后一个客户端完成时被销毁。
  • 每个线程都有一个队列,但有多个尾指针。虽然在生成/终止线程时处理线程会变得复杂。但是你还没有说明系统中的约束条件 - 线程数是固定的还是动态的。
© www.soinside.com 2019 - 2024. All rights reserved.