Является ли std :: atomic_compare_exchange_weak поточно-небезопасным по своей конструкции?

Воспитывался наcppreference atomic_compare_exchange Страница обсуждения что существующие реализацииstd::atomic_compare_exchange_weak вычислить логический результат CAS с помощью неатомарной инструкции сравнения, например,

    lock
    cmpxchgq   %rcx, (%rsp)
    cmpq       %rdx, %rax

который (Изменить: извинения за красную сельдь)

разорвать циклы CAS, такие как параллелизм в листинге Action 7.2:

while(!head.compare_exchange_weak(new_node->next, new_node);

Спецификация (29.6.5 [atomics.types.operations.req] / 21-22), по-видимому, подразумевает, что результат сравнения должен быть частью атомарной операции:

Эффекты: атомно сравнивает ...

Возвращает: результат сравнения

но действительно ли это осуществимо? Должны ли мы подавать отчеты об ошибках поставщикам или LWG?

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

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