Является ли 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?