使用atomic_load正确安全的线程

时间:2016-05-19 18:47:32

标签: c++ multithreading c++11 atomicity

我在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 ??

0 个答案:

没有答案