<atomic>
侵入共有ポインターを作成しており、参照カウンターにC++ 11 機能を使用しています。私のコードの関連する断片は次のとおりです。
//...
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
確信しました。memory_order_consume
さらに検討した結果、memory_order_relaxed
うまくいくはずだと私には思えます。
ここで問題はmemory_order_consume
、操作に使用できるかどうか、または弱い順序付け ( memory_order_relaxed
) を使用できるかどうか、またはより厳密な順序付けを使用する必要があるかどうかです。