【问题标题】:Atomically share(without a mutex) boost::intrusive_ptr?原子共享(没有互斥体) boost::intrusive_ptr?
【发布时间】: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_ptr stackoverflow.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


【解决方案1】:

这似乎是不可能的(至少对于 C++11),因为甚至 boost::atomic_shared_ptr 似乎为此使用了 boost::detail::spinlock。 参考:https://github.com/BeamMW/boost-linux/blob/master/boost/smart_ptr/atomic_shared_ptr.hpp

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2021-10-10
    • 2012-06-29
    相关资源
    最近更新 更多