增强多线程和共享变量

Boost multithreading and shared variables

本文关键字:共享变量 多线程 增强      更新时间:2023-10-16

首先,如果这个问题已经在这里的某个地方,我很抱歉,但是我的Google技能似乎使我失败了。

基本上,我的功能应随时检查任何传入的消息。还有一个全局变量,它应该存储此消息。(我将此功能放在线程中)

我想使用以下方式检查传入消息。

while (global_array[0] != '#') { } // all messages are padded with '#'

可悲的是,这似乎不起作用。

我尝试使此" global_array"挥发性,但是它不会与我用于接收的TCP功能有关。

我真的只需要它才能工作。

编辑:"似乎不起作用" ->变量似乎没有改变',因为我陷入了这个循环

在线程之间通信时,您需要某种形式的同步。制作变量volatile不是一种指示此变量在不同线程之间使用的方法。它所做的就是防止编译器优化对该变量的访问,但是CPU不会开始从其缓存以外的任何位置读取任何内存的内容,除非您告诉它。也就是说,使用volatile只是使您的代码较慢(是的,我知道在某些平台上,编译器实施者选择将volatile与多线程原始序列相关联,但通常认为这样做是一个坏主意)。

)。 )。

出于您描述的目的

  1. 读取线程锁定了互斥X,并保护对global_array的并发访问,并一直等待条件变量,直到有数据为止。
  2. 写入线程锁定了静音,将数据放入其中,解锁静音并为条件变量发出信号。

我认为Boost具有一个封装相似功能的类,我敢肯定,在不同线程之间进行交流的代码已将其发布到Stackoverflow。在Google上搜索"线程通信队列"会产生很多链接以获得灵感。