以下操作对std::unique_ptr
和/或std::shared_ptr
是否无法锁定?
read(*myPtr)
或myPtr->getSomething()
std::move(myUniquePtr)
或std::shared_ptr
超出范围时。就我而言,我不会同时从多个线程访问这些指针。我只是好奇我是否可以在高优先级,无锁线程上专门使用它们。由指针管理的对象在高优先级回调之前由主线程分配,并且在回调停止之前不会被释放。
谢谢!
答案 0 :(得分:5)
通过合理的实施,您可以假设:
<强>的std ::的unique_ptr 强>:
<强> STD :: shared_ptr的强>:
std::atomic<std::size_t>
一样无锁(可以使用成员函数is_lock_free
进行检查。)答案 1 :(得分:2)
标准所说的是shared_ptr<>
(20.7.2.2/4“类模板shared_ptr”)的所有内容:
use_count()
中的更改未反映可以进行的修改 介绍数据竞赛
并不是说use_count()
中的这些更改必须是无锁的。该标准允许使用互斥锁来防止数据竞争。
unique_ptr<>
没有承诺阻止数据竞争(它本身并不是线程安全的。)