atomic_fetch_or
atomic_fetch_or (원자적으로 비트 OR)
atomic 객체의 값과 인자를 비트 OR한 결과로 원자적으로 교체하고, 이전 값을 반환하는 연산이에요. <atomic> 헤더, C++11부터.
출처: cppreference
본문
atomic_fetch_or는 obj가 가리키는 값을, 그 이전 값과 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)와 함께 비트 단위 원자 조작을 구성할 때 쓰여요.