`_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 원문을 참고해요.