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