• 1587阅读
  • 4回复

[讨论]多线程数据传递共享问题 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2022-02-17
在mianwindow中move了两个object对象到QThread
需求:线程A中收到数据(数据一个int数值之类,一般是网口上来的),线程B中使用(甚至是线程C),A数据刷新周期很快,ms级别
方法:a.全局变量加锁(现在不想用这个)
          b.A信号发到B(也不想用,数据类随时在增加,信号会增多,结构体发送链表发送也不尽如人意)
没有其他的办法好一点,自己这两种都感觉很蠢
离线zhaoxg

只看该作者 1楼 发表于: 2022-02-17
可以这样吗?
在一个线程A建立一个结构,数据刷新时发送刷新信号,把结构指针作为参数发送出去

只看该作者 2楼 发表于: 2022-02-20
回 zhaoxg 的帖子
zhaoxg:可以这样吗?
在一个线程A建立一个结构,数据刷新时发送刷新信号,把结构指针作为参数发送出去 (2022-02-17 20:26) 

有的数据我也采用过引用传递的方式,指向的是同一片内存,和方法A一致感觉
离线qigebixia

只看该作者 3楼 发表于: 2022-03-06
当然是 C++无锁队列
离线wwwfffhhh

只看该作者 4楼 发表于: 2022-03-23
数据总是保存到加锁的多线程共享队列中的,关键是线程B要怎么编写,线程B应该采用等待信号量的方式,那么线程B可以在1微秒之内完成从共享队列取走数据,那么就不会影响线程A的运行。
建议编程思路:
线程A:接收数据--》进入临界区--》保存数据到共享队列--》离开临界区--发信号量让线程B处理数据
线程B:线程B本身是个死循环等待线程A的发信号量程序,所以线程B的处理流程应这样:等待线程A的需要处理数据信号量--》进入临界区--》取走所有的共享队列数据(此时不处理数据)--》离开临界区--》处理拿到的所有共享队列数据--》重新循环等待线程A的需要处理数据信号量

如果按照上面的多线程思路,那么你的处理数据都是微秒级完成的,数据的处理延迟也是微秒级完成的
快速回复
限100 字节
 
上一个 下一个