多线程:写入后从另一个线程首次访问...我需要易失性吗?

时间:2016-10-03 00:39:36

标签: c++ multithreading

希望这个问题很容易理解。无论如何,让我们写一些代码......

struct MyClass 
{
    int a;
    std::vector<char> b;
    ...
}

MyClass object;

假设我正在运行两个线程A和B:

  1. 线程A创建对象并读取或写入除a和b之外的一些数据成员。
  2. 线程A将指向对象的指针传递给将在线程B中运行的函数。
  3. 线程B向向量b写入或添加数据。
  4. 线程A读取a和b(即首次访问这些内容)。
  5. 如果答案是肯定的,即在这种情况下我需要volatile,我还有另外一个问题:为什么使用不可变对象的线程是安全的,其中数据成员写在一个线程中并在其他线程中读取?这似乎与这种情况非常相似:)

1 个答案:

答案 0 :(得分:1)

  

为什么使用不可变对象的线程是安全的,其中数据成员写在一个线程中并在其他线程中读取?

不可变对象创建,然后在此之后永远不会改变。由于只有在创建对象之后才能对对象进行多线程访问(在此之前要共享的内容),每个线程始终会看到相同的值。

因此,永远不会出现不可变对象在不同线程上出现不同的情况,因为不可变对象在共享后无法改变状态。