Из предложения C ++ 0x по атомарным типам и операциям C ++:
29.1 Порядок и согласованность [atomics.order]
Добавить новый подпункт со следующими параграфами.
Перечисление
memory_order
определяет подробный регулярный (неатомарный) порядок синхронизации памяти, как определено в [новый раздел, добавленный N2334 или его принятым преемником], и может обеспечивать порядок операций . Его перечисленные значения и их значения следующие. memory_order успех, memory_order сбой) volatile, где можно указать порядок памяти для CAS.
Я понимаю, что « memory_order_acq_rel
» обязательно синхронизирует только те ячейки памяти, которые необходимы для операции, в то время как другие ячейки памяти могут оставаться несинхронизированными (он не будет вести себя как ограждение памяти.)
Теперь у меня вопрос - если я выберу « memory_order_acq_rel
» и применим compare_swap
к целым типам, например, целым числам, как это обычно переводится в машинный код на современных потребительских процессорах, таких как многоядерный Intel i7? А как насчет других часто используемых архитектур (x64, SPARC, ppc, arm)?
В частности (предполагая конкретный компилятор, скажем gcc):
acq_rel
на i7? А как насчет других архитектур? Спасибо за все ответы.