如果值永不更改,是否可以安全地同时从不同线程访问类成员而不使用互斥体?值是简单的指针,因此创建副本不会影响原始值。您可以假定B
类本身是线程安全的。 A
类可以具有其他成员,将使用互斥量同步访问它们。
class A {
public:
A() { value = new B(); }
// thread safe?
B* get_value() { return value; }
private:
B* value; //never changes
}
最佳答案
您有一个名为A
的foo
实例:
A foo;
您调用
foo
的get_value()
函数,并将结果存储在名为bar
的变量中:auto bar = foo.get_value();
这本身就很好,但是假设用户修改了
bar
指向的值?*bar = B();
可以将
bar
中存储的地址复制到整个程序中。现在,所有这些副本都可以随时随地更改类B
中A
指向的值。