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에서 폐기).