原子共享(没有互斥锁)boost::intrusive_ptr?
Atomically share(without a mutex) boost::intrusive_ptr?
我知道 boost 有 atomic_shared_ptr,可以与 shared_ptr 一起使用。
但是有没有办法做与 boost::intrusive_ptr 类似的事情?
即是否可以在一个 writer/multiple reader 线程之间共享 boost::intrusive_ptr 而无需使用互斥锁?
背景:
不幸的是,我的工作场所只允许使用 C++11(目前还不允许使用 C++20)。 std::atomic_store C++11 中的函数似乎效率不高,因为它们在幕后使用了互斥锁(请参阅提到的 link 中的注释)。
另外,由于性能要求 new/delete 发生在 std/boost shared_ptr 中,控制块不是首选。因此需要使用 boost::intrusive_ptr.
这似乎是不可能的(至少对于 C++11),因为甚至 boost::atomic_shared_ptr 似乎也为此使用了 boost::detail::spinlock。
参考:https://github.com/BeamMW/boost-linux/blob/master/boost/smart_ptr/atomic_shared_ptr.hpp
我知道 boost 有 atomic_shared_ptr,可以与 shared_ptr 一起使用。
但是有没有办法做与 boost::intrusive_ptr 类似的事情?
即是否可以在一个 writer/multiple reader 线程之间共享 boost::intrusive_ptr 而无需使用互斥锁?
背景:
不幸的是,我的工作场所只允许使用 C++11(目前还不允许使用 C++20)。 std::atomic_store C++11 中的函数似乎效率不高,因为它们在幕后使用了互斥锁(请参阅提到的 link 中的注释)。
另外,由于性能要求 new/delete 发生在 std/boost shared_ptr 中,控制块不是首选。因此需要使用 boost::intrusive_ptr.
这似乎是不可能的(至少对于 C++11),因为甚至 boost::atomic_shared_ptr 似乎也为此使用了 boost::detail::spinlock。 参考:https://github.com/BeamMW/boost-linux/blob/master/boost/smart_ptr/atomic_shared_ptr.hpp