Атомика 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) или я должен использовать более строгий порядок?

Ответы на вопрос(1)

Ваш ответ на вопрос