atomic_atomic_flag_clear

atomic_atomic_flag_clear (원자적 플래그 해제)

std::atomic_flag_clearstd::atomic_flag를 해제(clear) 상태로 만들어요. 스핀락 해제 등에 써요.

출처: cppreference

본문

std::atomic_flag_clearstd::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();
}

더 알아보기 (Learn more)

cppreference