线程安全的getter值永远不会改变

时间:2014-03-30 13:30:20

标签: c++ thread-safety

如果值永远不会改变,那么在没有互斥锁的情况下同时从不同线程访问类成员是否安全?值是简单指针,因此创建副本对原始值没有影响。您可以假设B类本身是线程安全的。 A类可以有其他成员,使用互斥锁同步访问它们。

class A {
public:
  A() { value = new B(); }

  // thread safe?
  B* get_value() { return value; }

private:
  B* value; //never changes

}

1 个答案:

答案 0 :(得分:1)

您的A实例名为foo

A foo;

您调用foo的{​​{1}}函数并将结果存储在名为get_value()的变量中:

bar

这本身就很好,但假设用户修改了auto bar = foo.get_value(); 指向的值?

bar

存储在*bar = B(); 中的地址可以在整个程序中复制。现在,所有这些副本都可以修改您的班级barB指向的值,无论他们希望如何。