я читаю C ++ Параллелизм в действии Энтони Уильямс.
В разделе «Понимание непринужденного заказа»:
Есть несколько дополнительных вещей, которые вы можете сказать человеку в кабинке, например: «запишите это число и скажите, что был в нижней части списка(Обмен) и «записать
это число, если число внизу списка в том, что; иначе скажи мне, что я
должен был угадать »(compare_exchange_strong), но это не влияет на общее
принцип.
Означает ли это, что такие операции всегда читают последнее значение в порядке модификации (если нет дополнительных межпотоков, происходит до ограничений)? То есть Есть ли какие-нибудь обновления кешей и т. д. (даже в спокойном порядке)?
Да. Стандарт C ++ говорит (29.3 / 10):
Атомарные операции чтения-изменения-записи всегда должны читать последнее значение
(в порядке изменения) записывается перед записью, связанной с
операция чтения-изменения-записи.
И то и другое exchange
и успешно compare_exchange_{weak,strong}
операции являются операциями чтения-изменения-записи.
Других решений пока нет …