线程间通信的Volatile和互斥
volatile and mutex for inter thread communication
我有以下类
class Thread
{
int m_state;
Mutex m;
CondVar v;
Thread(): m_state( 0 ) {}
write()
{
// Get mutex m
// m_state = 1;
// signal v
};
read()
{
// Get mutex m
while( m_state == 0 )
{
wait v;
};
};
};
read()和write()可以在不同的线程中调用。
在这种情况下,我们是否必须使m_state或volatile或编译器确保优化(例如从内存读取m_state到寄存器并在寄存器上旋转)被阻止?
Volatile在这里不起作用,因为有两个问题:
- 编译器优化读/写(可以由编译器管理,部分)
- 内部CPU指令重排序(不能被编译器管理)
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 在一个读写器队列中,我可以用volatile替换原子吗
- 混淆了如何使用IDL与Ethovision进行通信
- C++ Boost::asio串行通信与Arduino无法写入
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 通过TCP的PvP通信问题
- C++一个线程如何正确通信其任务已完成?
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 删除功能不适用于串行通信后多个循环中的多个实例
- 网站和C++程序在同一台 Linux PC 上的通信
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 使用 pybind11 共享 MPI 通信器
- 进程间通信堆内存
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- C++ 两台不同机器之间通过wifi进行套接字通信
- 提升::Asio 异步聊天客户端停止与服务器通信
- 与SPI NAND闪存(STM32L4,QSPI)的通信问题
- 线程之间的通信不起作用 - C++
- 线程间通信的Volatile和互斥