Атомика C ++ 11 и счетчик ссылок навязанного общего указателя
Я пишу навязчивый общий указатель, и я использую C ++ 11<atomic>
средства для счетчика ссылок. Вот соответствующие фрагменты моего кода:
<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>
Я начал сmemory_order_acquire
а такжеmemory_order_release
сначала, но потом я убедил себя, чтоmemory_order_consume
должно быть достаточно хорошо После дальнейших размышлений мне кажется, что дажеmemory_order_relaxed
должно сработать.
Теперь вопрос в том, могу ли я использоватьmemory_order_consume
для операций или я мог бы использовать более слабый порядок (memory_order_relaxed
) или я должен использовать более строгий порядок?