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);
}

더 알아보기 (Learn more)

cppreference