gpt4 book ai didi

c++ - 我们是否需要对只有 read 方法的类进行线程安全设计?

转载 作者:太空狗 更新时间:2023-10-29 23:43:47 25 4
gpt4 key购买 nike

我在 C++ 中理解为防止多线程环境中的数据竞争,我们可以在类中添加一个 mutex

但是,如果有一个像下面这样的简单类,它只有一个get()方法,还需要考虑线程安全问题吗?

class SimpleClass {
public:
SimpleClass(int val) : v(val) {};
int get() { return v; }
private:
int v;
};

最佳答案

您的代码不安全,并且存在潜在的竞争条件。

class SimpleClass {
public:
SimpleClass(int val) : v(val) {};
int get() { return v; }
private:
int v;
};

void thread_1(SimpleClass& sc)
{
std::cout << sc.get() << '\n';
}

void thread_2(SimpleClass& sc)
{
SimpleClass other(5);
sc = other; // potential race
}

问题是编译器生成了一个赋值运算符,允许您的类的对象被赋值,这会覆盖它们的内部数据。

这会导致潜在的竞争。

关于c++ - 我们是否需要对只有 read 方法的类进行线程安全设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41416206/

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