Atomowość C ++ 11 i natrętna liczba współdzielonych wskaźników

Piszę natrętny wspólny wskaźnik i używam C ++ 11<atomic> urządzenia do licznika referencyjnego. Oto odpowiednie fragmenty mojego kodu:

<code>//...
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;
}
</code>

Zacząłem odmemory_order_acquire imemory_order_release Najpierw jednak przekonałem siebiememory_order_consume powinien być wystarczająco dobry. Po dalszych rozważaniach wydaje mi się, że nawetmemory_order_relaxed powinno działać.

Teraz pytanie brzmi, czy mogę użyćmemory_order_consume dla operacji lub czy mogę użyć słabszego zamawiania (memory_order_relaxed) czy powinienem użyć bardziej rygorystycznego zamawiania?

questionAnswers(1)

yourAnswerToTheQuestion