Атомарная операция неделима относительно конкурентных операций над тем же атомарным объектом. memory_order задаёт дополнительные ограничения на порядок и видимость обращений к памяти.
Что такое атомарная операция и за что отвечает memory_order?
Атомарная операция неделима относительно конкурентных операций над тем же атомарным объектом. memory_order задаёт дополнительные ограничения на порядок и видимость обращений к памяти.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Атомарная операция неделима относительно конкурентных операций над тем же атомарным объектом. memory_order задаёт дополнительные ограничения на порядок и видимость обращений к памяти.
relaxed сохраняет атомарность самой операции, но не публикует соседние обычные записи. release и соответствующее acquire, которое прочитало опубликованное значение или подходящую release sequence, могут установить синхронизацию между потоками. acq_rel сочетает обе стороны для read-modify-write.
seq_cst дополнительно задаёт единый порядок для sequentially consistent операций. Это не делает произвольный многошаговый алгоритм атомарным и не заменяет mutex для сложного инварианта. Не всякий atomic обязан быть lock-free; это зависит от типа и платформы. Выбирайте порядок по доказанной схеме синхронизации, а не ради формальной «оптимизации».
Источник: eel.is.