atomic_fetch_xor
atomic_fetch_xor (원자적으로 비트 XOR)
atomic 객체의 값과 인자를 비트 XOR한 결과로 원자적으로 교체하고, 이전 값을 반환하는 연산이에요. <atomic> 헤더, C++11부터.
출처: cppreference
본문
atomic_fetch_xor는 obj가 가리키는 값을, 그 이전 값과 arg의 비트 XOR 결과로 원자적으로 교체하고, 이전 값을 돌려줘요.
template< class T >
T atomic_fetch_xor( std::atomic<T>* obj,
typename std::atomic<T>::value_type arg ) noexcept; // (1)
_explicit 버전은 메모리 순서를 직접 지정해요.
template< class T >
T atomic_fetch_xor_explicit( std::atomic<T>* obj,
typename std::atomic<T>::value_type arg,
std::memory_order order) noexcept; // (3)
- 읽기-수정-쓰기(RMW)를 하나의 원자 연산으로 수행해요.
- 기본 메모리 순서는
std::memory_order_seq_cst예요.
XOR는 같은 값을 두 번 적용하면 원래대로 돌아오는 성질(대칭성)이 있어서, 토글(켜고 끄기) 패턴에 자주 쓰여요.
std::atomic<int> bits{0b1010};
std::atomic_fetch_xor(&bits, 0b0010); // 두 번째 비트 토글
비트를 토글하는 부호 없는 정수 상태 머신 등에서 AND/OR와 함께 쓰여요.