atomic_flag 초기화 매크로: ATOMIC_FLAG_INIT(C11)

atomic_flag 초기화 매크로: ATOMIC_FLAG_INIT(C11)

원자 타입 중에서도 부울 플래그처럼 쓰이는 atomic_flag락 프리(lock-free) 원자 부울 플래그예요. 이 플래그를 선언하고 처음 값을 'clear 상태'로 시작하고 싶다면 어떻게 해야 할까요? 그때 쓰는 게 ATOMIC_FLAG_INIT 매크로예요.

출처: cppreference

본문

정의

<stdatomic.h> 헤더에 이렇게 정의돼 있어요.

형태
#define ATOMIC_FLAG_INIT /* unspecified */

동작 방식

atomic_flag 타입을 clear 상태로 초기화하는 데 쓸 수 있는 초기화자로 확장돼요. 이 매크로로 초기화하지 않은 atomic_flag의 값은 불확정(indeterminate)이에요. 즉 선언만 하고 값을 셋팅하지 않으면 어떤 값인지 알 수 없다는 뜻이죠.

예제

플래그를 선언과 동시에 ATOMIC_FLAG_INIT으로 초기화하는 전형적인 사용처예요.

#include <stdatomic.h>

atomic_flag flag = ATOMIC_FLAG_INIT;

이렇게 하면 flag는 안전하게 clear 상태에서 시작해요. 나중에 atomic_flag_test_and_set이나 atomic_flag_clear로 상태를 바꿔 쓰게 됩니다.

더 알아보기

  • atomic_flag: 원자 부울 플래그 타입.
  • atomic_flag_test_and_set, atomic_flag_clear: 플래그 상태를 바꾸는 함수.
  • ATOMIC_VAR_INIT: 원자 변수 초기화 매크로(C17에서 폐기).