gpt4 book ai didi

c++ - 一个永不改变的值的线程安全 getter

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:23:19 24 4
gpt4 key购买 nike

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

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

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

private:
B* value; //never changes

}

最佳答案

你有一个名为 fooA 实例:

A foo;

您调用 fooget_value() 函数并将结果存储在名为 bar 的变量中:

auto bar = foo.get_value();

这本身就很好,但是假设用户修改了 bar 指向的值?

*bar = B();

存储在bar 中的地址可以在整个程序中被复制。现在,所有这些拷贝都可以在您的类 A 中修改 B 指向的值,无论何时,只要他们愿意。

关于c++ - 一个永不改变的值的线程安全 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22744554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com