C ++在多个ts队列之间分配数据

时间:2018-09-22 09:13:16

标签: c++ multithreading queue thread-safety pthreads

我正在尝试在多线程服务器实例的客户端下分发数据流,客户端线程只需要读取即可。这意味着我有一个线程,数据来自该线程,所有其他线程都需要读取该数据(它们不再需要更改),以便它们可以将数据发送到客户端。对于队列,我使用的是:https://blog.chrisd.info/a-simple-thread-safe-queue-for-use-in-multi-threaded-c-applications/模板类。

我的方法是创建队列列表并将数据推送到所有队列。这样我就可以在客户端线程(一个客户端线程一个队列)中读取它们。

创建列表:

ThreadSafeQueue<std::string> sq[50];

将数据放入所有队列:

for (i=0; i<50; i++)
{
sq[i].enqueue(buffer);
}

从每个线程一个队列中取出数据:

size = sq[local_thread_count].dequeue(res);

您可以找到完整的src代码here

每个客户端线程都是一个posix thread(clientHandler),除了使队列出队然后将信息发送给客户外,它什么都不做,该信息被另一个pthread (gpsDataStream)推入队列,该main function从串行接口读取信息然后将其排入所有队列。 所有线程都在local_thread_count variable中创建:

创建客户端线程时,https://github.com/mars/create-react-app-buildpack将增加1并作为参数传递。在那里,每个线程都从不同的队列中出队。

部分地,它与一个客户端线程一起工作,但是当添加第二个客户端线程时,第一个将停止接收数据,只有新的线程才能使数据出队。这不应该发生,因为它们都使用不同的队列。

0 个答案:

没有答案