为什么 libc++ 的 shared_ptr 实现使用完整的内存屏障而不是放松的?

Why does libc++'s implementation of shared_ptr use full memory barriers instead of relaxed?

shared_ptr 的 boost 实现中,它使用 relaxed memory ordering to increment its reference count. This appears safe as decrements use acquire/release to make sure that any previous decrements are visible to the thread before releasing memory. This method seems correct and appears in Herb Sutters talk on atomics

在 libc++ 的实现中使用 full memory barriers

template <class T>
inline T
increment(T& t) _NOEXCEPT
{
    return __sync_add_and_fetch(&t, 1);
}

template <class T>
inline T
decrement(T& t) _NOEXCEPT
{
    return __sync_add_and_fetch(&t, -1);
}

}  // name

这个决定有什么原因吗?它们之间是否存在任何性能或安全差异?

因为当我编写该代码时,编译器 (clang) 尚未实现 C++11 原子。而且我再也没有回去清理它。

这里没有什么微妙之处。 :-)