我正在尝试在多线程服务器实例的客户端下分发数据流,客户端线程只需要读取即可。这意味着我有一个线程,数据来自该线程,所有其他线程都需要读取该数据(它们不再需要更改),以便它们可以将数据发送到客户端。对于队列,我使用的是: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并作为参数传递。在那里,每个线程都从不同的队列中出队。
部分地,它与一个客户端线程一起工作,但是当添加第二个客户端线程时,第一个将停止接收数据,只有新的线程才能使数据出队。这不应该发生,因为它们都使用不同的队列。