有人知道完全线程安全的shared_ptr
实现吗?例如 boost 的实现shared_ptr
对于目标(引用计数)是线程安全的,并且对于同时shared_ptr
实例读取也是安全的,但对于写入或读/写则不是。
(参见Boost 文档,示例 3、4 和 5)。
shared_ptr
是否存在对实例完全线程安全的 shared_ptr 实现?
奇怪的是 boost 文档说:
shared_ptr 对象提供与内置类型相同级别的线程安全。
但是,如果将普通指针(内置类型)与 进行比较smart_ptr
,则同时写入普通指针是线程安全的,但同时写入 asmart_ptr
则不是。
编辑:我的意思是 x86 架构上的无锁实现。
EDIT2:这种智能指针的一个示例用例是有许多工作线程使用它们当前的工作项更新全局 shared_ptr 和一个对工作项进行随机采样的监视器线程。shared-ptr 将拥有该工作项,直到另一个工作项指针被分配给它(从而破坏先前的工作项)。监视器将通过将工作项分配给它自己的 shared-ptr 来获得工作项的所有权(从而防止工作项被销毁)。可以通过 XCHG 和手动删除来完成,但如果 shared-ptr 可以做到这一点会很好。
另一个例子是全局 shared-ptr 拥有一个“处理器”,并由某个线程分配,并由某个其他线程使用。当“用户”线程看到处理器 shard-ptr 为 NULL 时,它使用一些替代逻辑来进行处理。如果它不是 NULL,它会通过将处理器分配给它自己的 shared-ptr 来防止处理器被破坏。