原子地读取boost shared_ptr

时间:2010-09-09 15:58:13

标签: boost-smart-ptr

我有2个线程可以访问这个对象 线程A:更新boost hared_ptr成员 线程B:读取提升shared_ptr成员

由于shared_ptr不是整数/实数指针类型,因此线程B无法原子读取它。

我想避免锁定。

我如何保证线程B获得有效的shared_ptr?

谢谢!

1 个答案:

答案 0 :(得分:0)

即使它是普通类型,也不能保证在现实世界中根据您的架构以原子方式完成读取。

还要考虑线程B长时间停滞的情况,并且仍然有一个指向A可能已经删除的旧对象的指针。在这种情况下,您可能需要考虑使用RCU来防止A删除旧指针。但这也意味着更多的代码和更难以发现的错误

只需使用锁。额外的开销使您不必弄清楚为什么非同步不起作用。如果你真的想避免使用锁,请避免使用共享变量。