atomic_atomic_fetch_add

atomic_atomic_fetch_add (원자적 덧셈)

std::atomic_fetch_add는 원자적 객체의 현재 값에 값을 더하고 이전 값을 반환해요. CAS 루프 없이 안전하게 증가/감소할 수 있어요.

출처: cppreference

본문

std::atomic_fetch_addstd::atomic_fetch_add_explicit<atomic> 헤더에 정의된 자유 함수예요.

template< class T >
T atomic_fetch_add( std::atomic<T>* obj,
                    typename std::atomic<T>::difference_type arg ) noexcept;

template< class T >
T atomic_fetch_add_explicit( std::atomic<T>* obj,
                             typename std::atomic<T>::difference_type arg,
                             std::memory_order order ) noexcept;

obj가 가리키는 값에 arg를 원자적으로 더하고 이전 값을 반환해요. obj->fetch_add(arg)(또는 obj->fetch_add(arg, order))처럼 동작해요. T가 정수 타입이거나 포인터 타입일 때 사용 가능해요.

반환값 (Return value)

연산 전의 객체 값이에요.

예제 (Example)

#include <atomic>
#include <iostream>

std::atomic<int> counter{0};
int main()
{
    int prev = std::atomic_fetch_add(&counter, 5);
    std::cout << prev << '\n';             // 0
    std::cout << counter.load() << '\n';   // 5
}

더 알아보기 (Learn more)

cppreference