首页 文章

多个 生产环境 者单个消费者队列

提问于
浏览
4

我是多线程的新手,他设计了一个程序,从两个微控制器接收数据,测量各种温度(环境和水),并将数据绘制到屏幕上 . 现在该程序是单线程的,它的性能很快 .

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

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

2 回答

  • 2

    这是一个建议:
    1.有两个线程,负责获取数据并放入缓冲区 . 每个线程都有自己的(循环)缓冲区 .
    2.将有第三个线程负责从缓冲区获取数据并在屏幕上显示 .
    3.屏幕线程向请求某些数据的数据线程发送消息,然后显示数据 . 这些消息有助于同步执行并避免死锁 .
    4.没有线程应该"wait on single or multiple objects",但是对事件进行轮询 .

    想想使用人物的这种情况 . 一个人正在提供水温读数 . 另一个人提供环境温度读数 . 第三个人接收或询问数据并显示数据(在白板上) . 目标是让每个人在没有任何碰撞的情况下以最高效率运行 .

  • 2

    如果你正在寻找一个无锁的实现,你将找不到 . 在写入数据结构时,某些东西需要让两个线程同时更新数据结构并破坏它 .

    有没有什么理由你不能让它自己收集每个线程,它有自己的结构,然后在最后结合结果?

相关问题