atomic_fetch_max

atomic_fetch_max (원자적으로 최댓값 저장)

atomic 객체의 값을 기존 값과 인자 중 더 큰 값으로 원자적으로 교체하고, 이전 값을 반환하는 연산이에요. <atomic> 헤더, C++26부터.

출처: cppreference

본문

atomic_fetch_maxobj가 가리키는 값을, 이전 값과 argstd::max에 해당하는 값으로 원자적으로 교체하고, 이전 값을 돌려줘요.

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

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

template< class T >
T atomic_fetch_max_explicit( std::atomic<T>* obj,
                             typename std::atomic<T>::value_type arg,
                             std::memory_order order ) noexcept;   // (3)
  • 읽기-수정-쓰기(RMW)를 하나의 원자 연산으로 수행해요.
  • C++26에 새로 추가된 연산이라 그 이전 표준에서는 fetch_max가 없어요.

전형적인 용도는 "지금까지 본 최댓값 추적"이에요. 여러 스레드가 값을 갱신해도 결과가 항상 그 시점까지의 최댓값으로 유지되죠.

std::atomic<unsigned long> max_seen{0};
std::atomic_fetch_max(&max_seen, new_value);  // 더 크면 갱신

min 버전(atomic_fetch_min)과 함께 "최댓값/최솟값을 무잠금으로 유지"하는 패턴에 쓰여요.

더 알아보기 (Learn more)

cppreference