【发布时间】:2021-06-10 03:46:52
【问题描述】:
我知道 boost 有 atomic_shared_ptr 可以与 shared_ptr 一起使用。
但是有没有办法用 boost::intrusive_ptr 做类似的事情?
即是否可以在不使用互斥锁的情况下跨一个写入器/多个读取器线程共享 boost::intrusive_ptr ?
背景:
不幸的是,我的工作场所只允许使用 C++11(还不允许使用 C++20)。 C++11 中的std::atomic_store 函数似乎效率不高,因为它们在后台使用互斥锁(请参阅上述链接中的注释)。
另外,由于性能要求,在 std/boost shared_ptr 中发生的控制块的新/删除不是首选。因此需要使用 boost::intrusive_ptr。
【问题讨论】:
-
你可以在没有任何提升的情况下做到这一点。与
std::shared_ptr/std::weak_ptrstackoverflow.com/questions/63291791/… -
@АлексейНеудачин,提到的问题已被删除。 std::shared_ptr 可变操作不是线程安全的(因此 C++20 中的 std::atomic(std::shared_ptr) )。不幸的是,我的工作场所只允许使用 C++11(还不允许使用 C++20)。 C++11 中的 std::atomic_store 函数似乎效率不高,因为它们在后台使用互斥锁。此外,由于性能要求,在 std/boost shared_ptr 中发生的控制块的新/删除不是首选。
标签: c++ multithreading boost