为什么libc++的shared_ptr实现不将acq_rel fetch_sub拆分为release fetch_sub和acquire fence?

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 建议的那样,这看起来很优越,因为它不会对除最后一个减量之外的所有内容强加获取内存顺序。