0

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

由于 shared_ptr 不是整数/实指针类型,线程 B 不能原子地读取它。

我想避免锁。

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

谢谢!

4

1 回答 1

0

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

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

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

于 2010-09-09T16:19:09.760 回答