atomic_fetch_min
atomic_fetch_min (원자적으로 최솟값 저장)
atomic 객체의 값을 기존 값과 인자 중 더 작은 값으로 원자적으로 교체하고, 이전 값을 반환하는 연산이에요. <atomic> 헤더, C++26부터.
출처: cppreference
본문
atomic_fetch_min는 obj가 가리키는 값을, 이전 값과 arg 중 std::min에 해당하는 값으로 원자적으로 교체하고, 이전 값을 돌려줘요.
template< class T >
T atomic_fetch_min( std::atomic<T>* obj,
typename std::atomic<T>::value_type arg ) noexcept; // (1)
_explicit 버전은 메모리 순서를 직접 지정해요.
template< class T >
T atomic_fetch_min_explicit( std::atomic<T>* obj,
typename std::atomic<T>::value_type arg,
std::memory_order order ) noexcept; // (3)
- 읽기-수정-쓰기(RMW)를 하나의 원자 연산으로 수행해요.
- C++26에 새로 추가된 연산이에요.
전형적인 용도는 "지금까지 본 최솟값 추적"이에요. 여러 스레드에서 값을 갱신해도 그 시점까지의 최솟값으로 계속 유지돼요.
std::atomic<unsigned long> min_seen{ULONG_MAX};
std::atomic_fetch_min(&min_seen, candidate); // 더 작으면 갱신
max 버전(atomic_fetch_max)과 짝을 이루고, 직접 구현하려면 CAS 루프가 필요했던 것을 한 번의 원자 연산으로 대체해줘요.