`_Atomic` 키워드
_Atomic 키워드
여러 스레드가 같은 변수를 동시에 건드려도 문제없게 만들고 싶을 때, 그 변수의 타입을 원자적으로 선언하는 키워드가 _Atomic이에요. C11의 동시성 지원과 함께 등장했어요.
출처: cppreference
본문
_Atomic은 C11부터 도입된 키워드로, 원자 타입 지정자이자 한정자(atomic type specifier and qualifier) 로 쓰여요.
- 타입 지정자 위치:
_Atomic(T)형태로 타입을 감싸서 원자 타입을 만들 수 있어요. - 타입 한정자 위치:
_Atomic T처럼 변수에 한정자로 붙여 원자 객체를 선언할 수 있어요.
_Atomic(int) counter; // 원자 int 타입
_Atomic int flag; // 한정자로도 사용 가능
원자 객체는 읽거나 쓰는 조작이 중간에 끊기지 않고 하나의 단위로 수행돼요. 그래서 여러 스레드가 동시에 접근해도 데이터 경쟁(data race)이 없어져요.
더 알아보기
- 원자 타입의 실제 연산 함수들은
<stdatomic.h>의 atomic_load, atomic_fetch_add 등에서 다뤄요. - cppreference의 _Atomic 원문을 참고해요.