atomic_atomic_flag_clear
atomic_atomic_flag_clear (원자적 플래그 해제)
std::atomic_flag_clear는 std::atomic_flag를 해제(clear) 상태로 만들어요. 스핀락 해제 등에 써요.
출처: cppreference
본문
std::atomic_flag_clear와 std::atomic_flag_clear_explicit은 <atomic> 헤더에 정의된 자유 함수예요.
void atomic_flag_clear( std::atomic_flag* flag ) noexcept;
void atomic_flag_clear_explicit( std::atomic_flag* flag,
std::memory_order order ) noexcept;
flag가 가리키는 std::atomic_flag를 해제(clear, false) 상태로 원자적으로 만들어요. flag->clear(order)처럼 동작해요. 스핀락을 해제할 때 test_and_set과 짝을 이뤄 사용해요.
참고 (Notes)
memory_order_order(acquire) 또는 seq_cst 순서를 사용할 때 해제 연산이 적절해요. 스핀락을 풀 때는 release 순서가 흔히 쓰여요.
예제 (Example)
#include <atomic>
#include <thread>
std::atomic_flag lock = ATOMIC_FLAG_INIT;
void spin_lock() { while (lock.test_and_set(std::memory_order_acquire)); }
void spin_unlock() { lock.clear(std::memory_order_release); }
int main()
{
spin_lock();
// 임계 구역
spin_unlock();
}