增强多线程和共享变量
Boost multithreading and shared variables
首先,如果这个问题已经在这里的某个地方,我很抱歉,但是我的Google技能似乎使我失败了。
基本上,我的功能应随时检查任何传入的消息。还有一个全局变量,它应该存储此消息。(我将此功能放在线程中)
我想使用以下方式检查传入消息。
while (global_array[0] != '#') { } // all messages are padded with '#'
可悲的是,这似乎不起作用。
我尝试使此" global_array
"挥发性,但是它不会与我用于接收的TCP功能有关。
我真的只需要它才能工作。
编辑:"似乎不起作用" ->变量似乎没有改变',因为我陷入了这个循环
在线程之间通信时,您需要某种形式的同步。制作变量volatile
是不是一种指示此变量在不同线程之间使用的方法。它所做的就是防止编译器优化对该变量的访问,但是CPU不会开始从其缓存以外的任何位置读取任何内存的内容,除非您告诉它。也就是说,使用volatile
只是使您的代码较慢(是的,我知道在某些平台上,编译器实施者选择将volatile
与多线程原始序列相关联,但通常认为这样做是一个坏主意)。
出于您描述的目的
- 读取线程锁定了互斥X,并保护对
global_array
的并发访问,并一直等待条件变量,直到有数据为止。 - 写入线程锁定了静音,将数据放入其中,解锁静音并为条件变量发出信号。
我认为Boost具有一个封装相似功能的类,我敢肯定,在不同线程之间进行交流的代码已将其发布到Stackoverflow。在Google上搜索"线程通信队列"会产生很多链接以获得灵感。
相关文章:
- 全局变量 多读取器 一个写入器多线程安全?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 成员变量在多线程 C++ 时自行更改
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- C++多线程程序:变量定义为类成员的隔离错误
- 对全局变量的多线程访问:我应该使用互斥锁吗?
- 在多线程函数中返回共享的常量指针会导致计时问题吗?
- 多线程处理中的静态成员变量
- C++ 多线程中的锁和条件变量问题
- OpenMP:共享同一算法的单线程和多线程实现
- 多线程和共享资源:使用C++定期将数据从缓冲区(数据结构)复制到文件
- 我们是否需要对多线程 x32 系统使用 lock 来读取或写入 uint32_t 变量
- 在C++中使用多线程时,是否可以读取半写的、损坏的原始变量?
- 使用共享变量进行线程处理
- 多线程 - 降低效率,也许是由“ false共享”所产生的
- C 中的多线程程序:在标志变量上使用Mutex
- 共享内存多线程和数据访问
- 管理多线程应用程序中的共享变量
- 增强多线程和共享变量
- 并发:用于多线程环境中共享变量的C++11内存模型