c++ - 多生产者单消费者队列

标签 c++ multithreading queue gtkmm

我是多线程的新手,我设计了一个程序,它从两个测量不同温度(环境温度和水)的微 Controller 接收数据,并将数据绘制到屏幕上。现在这个程序是单线程的,它的性能非常糟糕。

我了解了多线程的基本设计方法,但还不足以创建线程来执行任务,但我没有了解的是如何让线程执行单独的任务并将数据放入共享数据池。我认为我需要创建一个具有一个消费者和多个生产者的队列(想使用 std::queue)。我在 gtkmm 线程文档上看到了一些代码,这些代码显示了单个 Con/Pro 队列,它们会锁定队列对象生成数据并向 sleep 线程发出信号,表明它已完成,然后生产者将进入休眠状态。对于我需要的东西,我需要休眠一个线程,如果我没有休眠任何线程,是否会出现数据冲突,并且休眠一个线程会导致数据显着数据延迟(我需要实时数据绘制 30 帧 a秒)

我将如何使用 gtkmm/glibmm 库编写这样的队列。

最佳答案

这里有一个建议:
1.有两个线程,负责获取数据并放入缓冲区。每个线程都有自己的(循环)缓冲区。
2.会有第三个线程负责从缓冲区中获取数据并显示在屏幕上。
3. 屏幕线程向数据线程发送消息请求一些数据,然后显示数据。这些消息有助于同步执行并避免死锁。
4. 所有线程都不应“等待单个或多个对象”,而是轮询事件。

用人来思考这个场景。一个人正在传送水温读数。另一个人提供环境温度读数。第三方接收或索取数据并显示数据(在白板上)。目标是让每个人都以最高效率运行,而不会发生任何碰撞。

关于c++ - 多生产者单消费者队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731170/

相关文章:

c++ - 在 Windows 8 中为 CUDA 禁用 TDR

python - Mongodb FindAndModify 多进程使用问题

multithreading - 多核 CPU、多线程和上下文切换?

c++ - 使用线程以定时间隔调用函数

multithreading - 使用线程和信号量时的段错误,Mac Vs Linux

java - 打印循环队列

performance - 如何减慢或设置 Kafka 流消费者的给定速度?

c++ - 如果我只给它一个指向我的对象的指针,std::vector 会占用什么内存?

c++ - 在c++中将句子作为输入

c++ - 在增量循环的情况下如何使用 SSE?