[C++] atomic/memory order
Updated:
개요
- atomic
- 산술 연산들을 원자적으로 수행해주는 템플릿 클래스
- 원자적
- 연산 사이에 다른 연산을 수행하지 않음
- 기본 자료형에 대해선 atomic_xxx로 typedef 되어 있음
- memory order
- 주위 다른 메모리들의 재배치 방식 지정 가능
- memory_order_relaxed
- 재배치 가능
- memory_order_consume
- memory_order_acquire
- 해당 연산 아래에 있는 연산들은 해당 연산 위로 재배치 금치
- memory_order_release
- 해당 연산 위에 있는 연산들은 해당 연산 아래로 재배치 금지
- memory_order_acq_rel
- memory_order_acquire와 memory_order_release를 모두 만족
- memory_order_seq_cst
- 순차적 일관성(재배치x) 보장
예제
- 코드
#include <atomic> #include <iostream> #include <type_traits> using namespace std; int main() { atomic<bool> a(true); atomic_bool b(false); cout << a << endl; cout << a.load() << endl; a.store(false); cout << a.load(memory_order_release) << endl; a = true; cout << a.load(memory_order_acquire) << endl; cout << "------" << endl; atomic_int c(1); c.fetch_add(1); cout << c.load() << endl; c.store(5); cout << c.load() << endl; c.fetch_sub(2); cout << c.load() << endl; return 0; }
- 실행 결과
1 1 0 1 ------ 2 5 3