<atomic>

원자성 작업을 지원하는 형식을 만드는 데 사용할 클래스 및 클래스 템플릿을 정의합니다.

구문

#include <atomic>

설명

참고 항목

사용하여 /clr:pure컴파일된 코드에서는 이 헤더가 차단됩니다. /clr:safe 둘 다 /clr:pure Visual Studio 2017 이상 버전에서 사용되지 않습니다.

원자성 작업에는 여러 스레드를 사용하여 잠금을 사용하지 mutex 않고 개체를 올바르게 조작하는 데 도움이 되는 두 가지 주요 속성이 있습니다.

  • 원자성 연산은 분리할 수 없으므로 다른 스레드에서 동일한 개체에 대한 두 번째 원자성 연산은 첫 번째 원자 연산 전후에만 개체의 상태를 가져올 수 있습니다.

  • 해당 memory_order 인수에 따라 원자성 연산은 동일한 스레드에서 다른 원자성 작업의 효과를 표시하기 위한 순서 지정 요구 사항을 설정합니다. 그 결과 순서 요구 사항을 위반하는 컴파일러 최적화는 금지됩니다.

일부 플랫폼에서는 mutex 잠금을 사용하지 않고서는 몇몇 형식의 원자 연산을 효율적으로 구현하지 못할 수 있습니다. 원자성 형식은 lock-free 해당 형식에 대한 원자성 연산이 잠금을 사용하지 않는 경우입니다.

C++11: 신호 처리기에서 개체 obj 에 대한 원자성 연산(있는 경우 obj.is_lock_free() ) atomic_is_lock_free(x) 을 수행할 수 있습니다 true.

클래스 atomic_flag 는 플래그를 보유하는 최소 원자성 형식을 bool 제공합니다. 해당 연산은 항상 잠금 해제입니다.

클래스 템플릿 atomic<T> 은 인수 형식 T 의 개체를 저장하고 저장된 값에 대한 원자성 액세스를 제공합니다. 를 사용하여 복사할 수 있는 모든 형식을 사용하여 memcpy 인스턴스화하고 같은지 memcmp테스트할 수 있습니다. 특히 이 클래스는 이러한 요구 사항을 충족하는 사용자 정의 형식과 함께, 그리고 많은 경우 부동 소수점 형식과 함께 사용할 수 있습니다.

템플릿에는 또한 정수 형식에 대한 특수화 집합 및 포인터에 대한 부분 특수화가 포함됩니다. 이러한 특수화는 기본 템플릿을 통해 사용할 수 없는 추가 작업을 제공합니다.

포인터 특수화

atomic<T *> 부분 특수화는 모든 포인터 형식에 적용되며, 포인터 산술 연산에 대한 메서드를 제공합니다.

정수 계열 특수화

atomic<integral> 특수화는 모든 정수 형식에 적용되며, 기본 템플릿을 통해 사용할 수 없는 추가 작업을 제공합니다.

atomic<integral> 형식에는 컴파일 시간에 해당 형식에 대한 연산이 잠금 해제인지를 확인하기 위해 if directive에서 사용할 수 있는 해당 매크로가 있습니다. 매크로 값이 0이면 형식에 대한 작업이 잠금 해제되지 않습니다. 값이 1이면 연산은 잠금 해제일 수 있으며, 런타임 확인이 필요합니다. 값이 2이면 연산은 잠금 해제입니다. 형식에 대한 연산이 잠금 해제인지를 런타임 시 확인하려면 atomic_is_lock_free 함수를 사용할 수 있습니다.

각 정수 계열 형식에는 해당 정수 형식의 개체를 관리하는 명명된 원자성 형식이 있습니다. 각 atomic_integral 형식에는 atomic<T>의 해당 인스턴스화와 동일한 멤버 함수 집합이 있으며, 이 형식은 비 멤버 원자성 함수 중 하나로 전달될 수 있습니다.

atomic_integral 형식 정수 형식 atomic_is_lock_free 매크로
atomic_char char ATOMIC_CHAR_LOCK_FREE
atomic_schar signed char ATOMIC_CHAR_LOCK_FREE
atomic_uchar unsigned char ATOMIC_CHAR_LOCK_FREE
atomic_char16_t char16_t ATOMIC_CHAR16_T_LOCK_FREE
atomic_char32_t char32_t ATOMIC_CHAR32_T_LOCK_FREE
atomic_wchar_t wchar_t ATOMIC_WCHAR_T_LOCK_FREE
atomic_short short ATOMIC_SHORT_LOCK_FREE
atomic_ushort unsigned short ATOMIC_SHORT_LOCK_FREE
atomic_int int ATOMIC_INT_LOCK_FREE
atomic_uint unsigned int ATOMIC_INT_LOCK_FREE
atomic_long long ATOMIC_LONG_LOCK_FREE
atomic_ulong unsigned long ATOMIC_LONG_LOCK_FREE
atomic_llong long long ATOMIC_LLONG_LOCK_FREE
atomic_ullong unsigned long long ATOMIC_LLONG_LOCK_FREE

Typedef 이름은 머리글 <inttypes.h>에 정의된 일부 형식에 대한 원자성 템플릿의 특수화를 위해 존재합니다.

원자성 형식 Typedef Name
atomic_int8_t atomic<int8_t>
atomic_uint8_t atomic<uint8_t>
atomic_int16_t atomic<int16_t>
atomic_uint16_t atomic<uint16_t>
atomic_int32_t atomic<int32_t>
atomic_uint32_t atomic<uint32_t>
atomic_int64_t atomic<int64_t>
atomic_uint64_t atomic<uint64_t>
atomic_int_least8_t atomic<int_least8_t>
atomic_uint_least8_t atomic<uint_least8_t>
atomic_int_least16_t atomic<int_least16_t>
atomic_uint_least16_t atomic<uint_least16_t>
atomic_int_least32_t atomic<int_least32_t>
atomic_uint_least32_t atomic<uint_least32_t>
atomic_int_least64_t atomic<int_least64_t>
atomic_uint_least64_t atomic<uint_least64_t>
atomic_int_fast8_t atomic<int_fast8_t>
atomic_uint_fast8_t atomic<uint_fast8_t>
atomic_int_fast16_t atomic<int_fast16_t>
atomic_uint_fast16_ atomic<uint_fast16_t>
atomic_int_fast32_t atomic<int_fast32_t>
atomic_uint_fast32_t atomic<uint_fast32_t>
atomic_int_fast64_t atomic<int_fast64_t>
atomic_uint_fast64_t atomic<uint_fast64_t>
atomic_intptr_t atomic<intptr_t>
atomic_uintptr_t atomic<uintptr_t>
atomic_size_t atomic<size_t>
atomic_ptrdiff_t atomic<ptrdiff_t>
atomic_intmax_t atomic<intmax_t>
atomic_uintmax_t atomic<uintmax_t>

구조체

이름 설명
atomic 구조 저장된 값에 대한 작업을 수행하는 atomic 개체에 대해 설명합니다.
atomic_flag 구조 bool 플래그를 원자 단위로 설정하고 지우는 개체를 설명합니다.

열거형

이름 설명
memory_order 열거형 메모리 위치에서 동기화 연산에 대한 기호 이름을 제공합니다. 이러한 연산은 하나의 스레드의 할당이 다른 스레드에 표시될 방법에 영향을 미칩니다.

함수

다음 목록에서 끝나지 _explicit 않는 함수는 암시적 memory_order 인수가 있다는 점을 제외하고 해당 _explicit함수의 memory_order_seq_cst의미 체계를 갖습니다.

이름 설명
atomic_compare_exchange_strong 작업을 수행합니다 atomic compare and exchange .
atomic_compare_exchange_strong_explicit 작업을 수행합니다 atomic compare and exchange .
atomic_compare_exchange_weak 작업을 수행합니다 weak atomic compare and exchange .
atomic_compare_exchange_weak_explicit 작업을 수행합니다 weak atomic compare and exchange .
atomic_exchange 저장된 값을 대체합니다.
atomic_exchange_explicit 저장된 값을 대체합니다.
atomic_fetch_add 기존의 저장된 값에 지정된 값을 더합니다.
atomic_fetch_add_explicit 기존의 저장된 값에 지정된 값을 더합니다.
atomic_fetch_and 지정된 값과 기존 저장된 값에 대해 비트 "and"(&)를 수행합니다.
atomic_fetch_and_explicit 지정된 값과 기존 저장된 값에 대해 비트 "and"(&)를 수행합니다.
atomic_fetch_or 지정된 값과 기존 저장된 값에 대해 비트 "or"(|)를 수행합니다.
atomic_fetch_or_explicit 지정된 값과 기존 저장된 값에 대해 비트 "or"(|)를 수행합니다.
atomic_fetch_sub 기존의 저장된 값에서 지정된 값을 뺍니다.
atomic_fetch_sub_explicit 기존의 저장된 값에서 지정된 값을 뺍니다.
atomic_fetch_xor 지정된 값과 기존 저장된 값에 대해 비트 "배타적 또는" (^)를 수행합니다.
atomic_fetch_xor_explicit 지정된 값과 기존 저장된 값에 대해 비트 "배타적 또는" (^)를 수행합니다.
atomic_flag_clear atomic_flag 개체의 플래그를 false로 설정합니다.
atomic_flag_clear_explicit atomic_flag 개체의 플래그를 false로 설정합니다.
atomic_flag_test_and_set atomic_flag 개체의 플래그를 true로 설정합니다.
atomic_flag_test_and_set_explicit atomic_flag 개체의 플래그를 true로 설정합니다.
atomic_init atomic 개체에서 저장된 값을 설정합니다.
atomic_is_lock_free 지정된 개체에 대한 원자 연산이 잠금 해제인지를 지정합니다.
atomic_load 값을 원자 단위로 검색합니다.
atomic_load_explicit 값을 원자 단위로 검색합니다.
atomic_signal_fence 동일한 스레드에서 fence 실행되는 신호 처리기가 있는 호출 스레드의 펜스 간에 메모리 순서 지정 요구 사항을 설정하는 역할을 합니다.
atomic_store 값을 원자 단위로 저장합니다.
atomic_store_explicit 값을 원자 단위로 저장합니다.
atomic_thread_fence fence 다른 펜스와 관련하여 메모리 순서 지정 요구 사항을 설정하는 역할을 합니다.
kill_dependency 가능한 종속성 체인을 중단합니다.

참고 항목

헤더 파일 참조
C++ 표준 라이브러리 참조