atomic_fetch_or

atomic_fetch_or (원자적으로 비트 OR)

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

출처: cppreference

본문

atomic_fetch_orobj가 가리키는 값을, 그 이전 값과 arg비트 OR 결과로 원자적으로 교체하고, 이전 값을 돌려줘요.

template< class T >
T atomic_fetch_or( std::atomic<T>* obj,
                   typename std::atomic<T>::value_type arg ) noexcept;   // (1)

_explicit 버전은 메모리 순서를 직접 지정해요.

template< class T >
T atomic_fetch_or_explicit( std::atomic<T>* obj,
                            typename std::atomic<T>::value_type arg,
                            std::memory_order order ) noexcept;   // (3)
  • 읽기-수정-쓰기(RMW)를 하나의 원자 연산으로 수행해요.
  • 기본 메모리 순서는 std::memory_order_seq_cst예요.

"플래그 켜기"가 대표적인 용도예요. 여러 스레드가 각자 다른 비트를 켜도 서로의 변경을 덮어쓰지 않고 안전하게 반영돼요.

std::atomic<int> flags{0};
std::atomic_fetch_or(&flags, 0b0001);  // 첫 비트 켜기
std::atomic_fetch_or(&flags, 0b0010);  // 둘째 비트 켜기

AND(fetch_and), XOR(fetch_xor)와 함께 비트 단위 원자 조작을 구성할 때 쓰여요.

더 알아보기 (Learn more)

cppreference