atomic_flag_clear
atomic_flag_clear (플래그를 false로 원자적으로 설정)
std::atomic_flag를 원자적으로 cleared(false) 상태로 바꾸는 자유 함수예요. 스핀락 해제에 해당해요. <atomic> 헤더, C++11부터.
출처: cppreference
본문
atomic_flag_clear는 obj가 가리키는 std::atomic_flag의 상태를 원자적으로 cleared(false)로 바꿔요.
void atomic_flag_clear( volatile std::atomic_flag* obj ) noexcept; // (1)
void atomic_flag_clear( std::atomic_flag* obj ) noexcept; // (2)
메모리 동기화 순서는 기본적으로 std::memory_order_seq_cst예요. _explicit 버전은 순서를 직접 지정해요.
void atomic_flag_clear_explicit( std::atomic_flag* obj,
std::memory_order order ) noexcept; // (4)
주의할 점은 _explicit 버전에서 order가 std::memory_order_consume, std::memory_order_acquire, std::memory_order_acq_rel 중 하나면 동작이 미정의라는 거예요. 해제 동작이므로 해제(release) 계열 순서만 의미가 있기 때문이죠.
std::atomic_flag lock = ATOMIC_FLAG_INIT;
// 임계 구역 종료 시
atomic_flag_clear_explicit(&lock, std::memory_order_release);
test_and_set으로 잠그고 clear로 푸는 스핀락 짝을 이뤄요. 자유 함수보다 멤버 함수(lock.clear(...))가 더 자주 쓰여요.