atomic_memory_order
atomic_memory_order (메모리 순서)
std::memory_order는 원자적 연산들 간의 메모리 동기화 순서를 지정하는 열거형이에요. relaxed, consume, acquire, release, acq_rel, seq_cst 값을 제공해요.
출처: cppreference
본문
std::memory_order는 <atomic> 헤더에 정의된 열거형이에요.
enum memory_order {
relaxed, consume, acquire, release, acq_rel, seq_cst
};
relaxed— 순서 제약이 없어요.consume— 의존적 소비 순서만 보장해요 (대부분의 구현에서 acquire처럼 동작).acquire— 이후의 연산이 이 로드 이전의 release 연산과 동기화되어 visible함을 보장해요.release— 이전의 연산이 이후의 acquire 연산에 visible함을 보장해요.acq_rel— acquire와 release를 모두 적용해요 (read-modify-write).seq_cst— 전역적으로 일관된 단일 순서(sequentially consistent)를 보장해요. 기본값이에요.
메모리 순서는 다른 스레드의 평가와 부작용이 어떻게 정렬되는지를 결정해요. sequenced-before, synchronizes-with, happens-before 등의 관계로 정의돼요.
예제 (Example)
#include <atomic>
std::atomic<int> a{0};
int main()
{
a.store(1, std::memory_order_release);
int x = a.load(std::memory_order_acquire);
}