相关疑难解决方法(0)

什么时候使用volatile多线程?

如果有两个线程访问全局变量,那么许多教程都说使变量volatile变为阻止编译器将变量缓存在寄存器中,从而无法正确更新.但是,访问共享变量的两个线程是通过互斥锁来调用保护的东西不是吗?但是在这种情况下,在线程锁定和释放互斥锁之间,代码处于一个关键部分,只有那个线程可以访问变量,在这种情况下变量不需要是volatile?

那么多线程程序中volatile的用途/目的是什么?

c++ concurrency multithreading atomic volatile

121
推荐指数
3
解决办法
5万
查看次数

C++ volatile成员函数

class MyClass
{
    int x, y;
    void foo() volatile {
        // do stuff with x
        // do stuff with y
    }   
};
Run Code Online (Sandbox Code Playgroud)

我是否需要声明x并将其y视为volatile或将成为volatile自动处理的所有成员变量?

我想确保"stuff with x"不会y被编译器的"stuff with " 重新排序.

编辑:如果我将正常类型转换为volatile类型会发生什么?这是否会指示编译器不重新排序对该位置的访问?我想在特殊情况下将一个普通变量传递给一个参数是volatile的函数.我必须确保编译器不会使用先前或后续的读写重新排序该调用.

c++ volatile member-functions

39
推荐指数
3
解决办法
2万
查看次数

原子操作与易失性原子变量

为什么c ++原子操作有一个volatile的重载版本atomic<T>

我们atomic<T>什么时候需要声明为volatile,什么是atomic<T>volatile atomic<T>?之间的区别?

c++ atomic c++11

5
推荐指数
1
解决办法
464
查看次数