全局变量在2个不同核心上的2个并发运行线程之间共享.线程写入和读取变量.对于原子变量,一个线程可以读取过时值吗?每个核心可能在其缓存中具有共享变量的值,并且当一个线程在缓存中写入其副本时,不同核心上的另一个线程可能从其自己的缓存中读取过时值.或者编译器执行强大的内存排序以从其他缓存中读取最新值?c ++ 11标准库具有std :: atomic支持.这与volatile关键字有何不同?在上述场景中,volatile和atomic类型的行为方式有何不同?
你什么时候使用C++ mutable关键字?为什么?我认为我不必使用该关键字.我知道它用于诸如缓存(或者可能是记忆)之类的东西,但是你需要在什么类和条件下使用它呢?
如果我有一个C++方法声明如下:
class A
{
public:
double getPrice() volatile;
};
Run Code Online (Sandbox Code Playgroud)
volatile这里有什么代表?您可能会感兴趣的这种由安德烈Alexandrescu的多布斯博士的文章.我曾是 :)
编辑: 那篇文章写了一段时间,现在似乎社区已经开始了.香草萨特有这说这个.谢谢Iain(和Herb!)
mlimber他指出,Andrei在这里有一篇后续文章,他继续提倡使用不稳定的正确性作为检测支持POSIX类互斥体的系统上的竞争条件的有用工具.
什么时候可以,什么时候不能调用可变变量?
int/float/bool 值非常清楚。但是,比方说,数组呢?mutable如果我要向它添加元素,我可以调用 native array吗?与std::vector.
再举一个例子。我有对象 A,它保持对另一个对象 B 的引用 (B & b)。对象 B 有我将重新分配的本机数组/ std::vector (我认为在这种特殊情况下是类似的)。伪代码:
struct B{
std::vector<int> arr;
// int *arr; //Or this
void changeArr(){
arr.push_back(90);
}
}
struct A{
A(B &b) : b(b){};
mutable B &b; // is it ok to have it "mutable"?
//mutable B b; // or even this?
void fire() const{
b.arr.push_back(125);
// Or
b.changeArr();
}
}
Run Code Online (Sandbox Code Playgroud)
我可以调用B &b可变的吗?
更新
根据http://en.cppreference.com/w/cpp/language/cv:
可变 - 定义类的成员不影响类的外部可见状态。
这是什么externally …