And*_*hko 7 c++ atomic shared-ptr memory-barriers libc++
release()为了简单起见,libc++的shared_ptr实现可以描述为:
void release()
{
if (ref_count.fetch_sub(1, std::memory_order_acq_rel) == 1)
{
delete this;
}
}
Run Code Online (Sandbox Code Playgroud)
为什么libc++不把它分成release decrement和acquisition fence呢?
void release()
{
if (ref_count.fetch_sub(1, std::memory_order_release) == 1)
{
std::atomic_thread_fence(std::memory_order_acquire);
delete this;
}
}
Run Code Online (Sandbox Code Playgroud)
正如Boost 建议的那样,这看起来很优越,因为它不会对除最后一个减量之外的所有内容强加获取内存顺序。