Skip to content

2014 10 20 atomic

krikit edited this page Nov 26, 2014 · 1 revision

atomic

멀티 쓰레드 환경에서는 변수를 읽고 값을 변경시키는 중간에 컨텍스트 스위치가 일어나 예상치 못한 결과를 야기할 수 있습니다. 이러한 상황을 방지하기 위해서는 락(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_"로 시작하는 함수들과 각각 대응하는 오버라이딩된 연산자를 제공합니다.

Clone this wiki locally