atomic_atomic_flag_test_and_set
atomic_atomic_flag_test_and_set (원자적 플래그 설정)
std::atomic_flag_test_and_set는 std::atomic_flag를 설정(set) 상태로 만들어 이전 값을 반환해요. 스핀락 구현의 핵심 연산이에요.
출처: cppreference
본문
std::atomic_flag_test_and_set와 std::atomic_flag_test_and_set_explicit은 <atomic> 헤더에 정의된 자유 함수예요.
bool atomic_flag_test_and_set( std::atomic_flag* flag ) noexcept;
bool atomic_flag_test_and_set_explicit( std::atomic_flag* flag,
std::memory_order order ) noexcept;
flag가 가리키는 std::atomic_flag를 설정(set, true) 상태로 원자적으로 만들고 이전 값을 반환해요(원자적 read-modify-write). flag->test_and_set(order)처럼 동작해요.
반환값 (Return value)
연산 전의 플래그 값이에요 (true였으면 이미 설정됨).
예제 (Example)
#include <atomic>
#include <thread>
std::atomic_flag lock = ATOMIC_FLAG_INIT;
void spin_lock() { while (lock.test_and_set(std::memory_order_acquire)); }
int main()
{
spin_lock();
// 임계 구역
lock.clear(std::memory_order_release);
}