atomic_fetch_xor

atomic_fetch_xor (원자적으로 비트 XOR)

atomic 객체의 값과 인자를 비트 XOR한 결과로 원자적으로 교체하고, 이전 값을 반환하는 연산이에요. <atomic> 헤더, C++11부터.

출처: cppreference

본문

atomic_fetch_xorobj가 가리키는 값을, 그 이전 값과 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와 함께 쓰여요.

더 알아보기 (Learn more)

cppreference