-
Notifications
You must be signed in to change notification settings - Fork 2
2014 10 20 atomic
krikit edited this page Nov 26, 2014
·
1 revision
멀티 쓰레드 환경에서는 변수를 읽고 값을 변경시키는 중간에 컨텍스트 스위치가 일어나 예상치 못한 결과를 야기할 수 있습니다. 이러한 상황을 방지하기 위해서는 락(lock)을 이용하여 보호하여야 합니다. C++11의 atomic 템플릿 클래스는 이러한 작업을 간편하게 도와주는 클래스입니다.
#include <atomic>
std::atomic<int> atm_int(0);
atm_int.fetch_add(1); // 1 더하기
atm_int -= 2; // 2 빼기
atm_int.fetch_and(0xFF); // 0xFF와 logical and
atm_int |= 0xFF; // 0xFF와 logical or
atm_int.fetch_xor(0xFF); // 0xFF와 logical xor
int val = atm_int.load(); // 값 읽기
atm_int.store(3); // 값 저장
int old_val = atm_int.exchange(4); // 값 교환
int, double, 포인터 등의 기본 타입들에 대해서는 템플릿 특수화를 통해 "fetch_"로 시작하는 함수들과 각각 대응하는 오버라이딩된 연산자를 제공합니다.