我在c ++项目中工作,我遇到了这个疑问
我有这个对象可以被许多线程访问
std::shared_ptr<const Node> local_node(std::make_shared<const Node>());
当我想阅读我使用的节点时:
auto node = std::atomic_load(&local_node)
我想修改节点我复制节点,然后修改副本,最后我对原始节点执行 atomic_storage :
auto node = new Node(*std::atomic_load(&local_node));
node->foo = new_foo;
std::atomic_store(&local_node, std::shared_ptr<const Node>(node));
我的问题是,这种方法对我的Node线程安全是否正确?还是有竞争条件的可能性呢?
当我从 atomic_load 读取节点时,从我的节点读取属性是安全的吗?
auto node = std::atomic_load(&local_node)
auto copy_foo = node->foo; //This is safe ??