我正在编写侵入式共享指针,并且正在使用 C++11<atomic>
工具作为引用计数器。以下是我的代码的相关片段:
//...
mutable std::atomic<unsigned> count;
//...
void
SharedObject::addReference() const
{
std::atomic_fetch_add_explicit (&count, 1u,
std::memory_order_consume);
}
void
SharedObject::removeReference() const
{
bool destroy;
destroy = std::atomic_fetch_sub_explicit (&count, 1u,
std::memory_order_consume) == 1;
if (destroy)
delete this;
}
我从memory_order_acquire
and memory_order_release
first 开始,但后来我说服自己memory_order_consume
应该足够好。经过进一步审议,在我看来,甚至memory_order_relaxed
应该工作。
现在,问题是我是否可以使用memory_order_consume
这些操作,或者我可以使用较弱的排序 ( memory_order_relaxed
) 还是应该使用更严格的排序?