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?