如果值永远不会改变,那么在没有互斥锁的情况下同时从不同线程访问类成员是否安全?值是简单指针,因此创建副本对原始值没有影响。您可以假设B
类本身是线程安全的。 A
类可以有其他成员,使用互斥锁同步访问它们。
class A {
public:
A() { value = new B(); }
// thread safe?
B* get_value() { return value; }
private:
B* value; //never changes
}
答案 0 :(得分:1)
您的A
实例名为foo
:
A foo;
您调用foo
的{{1}}函数并将结果存储在名为get_value()
的变量中:
bar
这本身就很好,但假设用户修改了auto bar = foo.get_value();
指向的值?
bar
存储在*bar = B();
中的地址可以在整个程序中复制。现在,所有这些副本都可以修改您的班级bar
中B
指向的值,无论他们希望如何。