我有2个线程可以访问这个对象 线程A:更新boost hared_ptr成员 线程B:读取提升shared_ptr成员
由于shared_ptr不是整数/实数指针类型,因此线程B无法原子读取它。
我想避免锁定。
我如何保证线程B获得有效的shared_ptr?
谢谢!
答案 0 :(得分:0)
即使它是普通类型,也不能保证在现实世界中根据您的架构以原子方式完成读取。
还要考虑线程B长时间停滞的情况,并且仍然有一个指向A可能已经删除的旧对象的指针。在这种情况下,您可能需要考虑使用RCU来防止A删除旧指针。但这也意味着更多的代码和更难以发现的错误
只需使用锁。额外的开销使您不必弄清楚为什么非同步不起作用。如果你真的想避免使用锁,请避免使用共享变量。