개요
- 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
예제
- 코드
#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;
}
- 실행 결과