gpt4 book ai didi

multithreading - 当有一个读者和一个作者线程时,我是否需要使用 std::atomic_

转载 作者:行者123 更新时间:2023-12-05 00:56:17 25 4
gpt4 key购买 nike

我希望在读写器场景中使用 std::shared_ptr 。一个线程不断接收新信息并保持一个指向最新数据的智能指针。当需要运行我的慢速计算时,我会使用一个指向所有数据的智能指针,以确保我正在查看一致的数据。在下面的示例中,当我使用 a 和 b 时,我知道它们属于一起。

我不确定是否应该在这里使用 atomic_load 和 atomic_store?我不太关心我正在查看哪个版本的 Foo,只要它一致且有效。

那么我应该在我的智能指针上使用 atomic 以便这段代码在两个不同的线程中工作吗?

谢谢,

保罗

#include <iostream>
#include <memory>


class Foo{
public:
int a;
int b;
};

class MyClass{
public:
std::shared_ptr <Foo> lastValue;
void realTimeUpdate (Foo* latest) { //takes ownership of Foo
lastValue=std::shared_ptr <Foo> (latest); //Is this OK to do without using std::atomic_?
};

void doSlowCalcFromAnotherThread () {
//take a reference to all input data
std::shared_ptr <Foo> stableValue=lastValue; //Is this OK to do without using std::atomic_
//display a and b guaranteed that they come from the same message
std::cout<<"a: "<<stableValue->a<<std::endl;
std::cout<<"b: "<<stableValue->b<<std::endl;
};
};

最佳答案

  • shared_ptr::operator= 默认情况下不是原子的。
  • shared_ptr 不是 TriviallyCopyable,所以它不能作为 std::atomic 的模板参数。

  • 所以你必须以其他方式同步它们,例如通过 std::mutex。

    关于multithreading - 当有一个读者和一个作者线程时,我是否需要使用 std::atomic_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36412841/

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