希望这个问题很容易理解。无论如何,让我们写一些代码......
struct MyClass
{
int a;
std::vector<char> b;
...
}
MyClass object;
假设我正在运行两个线程A和B:
如果答案是肯定的,即在这种情况下我需要volatile,我还有另外一个问题:为什么使用不可变对象的线程是安全的,其中数据成员写在一个线程中并在其他线程中读取?这似乎与这种情况非常相似:)
答案 0 :(得分:1)
为什么使用不可变对象的线程是安全的,其中数据成员写在一个线程中并在其他线程中读取?
不可变对象创建,然后在此之后永远不会改变。由于只有在创建对象之后才能对对象进行多线程访问(在此之前要共享的内容),每个线程始终会看到相同的值。
因此,永远不会出现不可变对象在不同线程上出现不同的情况,因为不可变对象在共享后无法改变状态。