<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) を使用できるかどうか、またはより厳密な順序付けを使用する必要があるかどうかです。