다음을 통해 공유


atomic 구조

저장된 형식 값에 대한 작업을 수행하는 atomic 개체에 대해 설명합니다 Ty.

구문

template <class Ty>
struct atomic;

멤버

멤버 설명
Constructor
atomic atomic 개체를 생성합니다.
연산자
atomic::operator Ty 저장된 값을 읽고 반환합니다. (atomic::load)
atomic::operator= 지정된 값을 사용하여 저장된 값을 바꿉니다. (atomic::store)
atomic::operator++ 저장된 값을 증가시킵니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.
atomic::operator+= 지정된 값을 저장된 값에 더합니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.
atomic::operator-- 저장된 값 를 줄입니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.
atomic::operator-= 지정된 값을 저장된 값에서 뺍니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.
atomic::operator&= 지정된 값과 저장된 값에 대해 비트 "and"(&)를 수행합니다. 정수 계열 특수화에서만 사용됩니다.
atomic::operator|= 지정된 값과 저장된 값에 대해 비트 "or"(|)를 수행합니다. 정수 계열 특수화에서만 사용됩니다.
atomic::operator^= 지정된 값과 저장된 값에 대해 비트 "배타적 또는" (^)를 수행합니다. 정수 계열 특수화에서만 사용됩니다.
함수
compare_exchange_strong this에서 atomic_compare_and_exchange 연산을 수행하고 결과를 반환합니다.
compare_exchange_weak this에서 weak_atomic_compare_and_exchange 연산을 수행하고 결과를 반환합니다.
fetch_add 지정된 값을 저장된 값에 더합니다.
fetch_and 지정된 값과 저장된 값에 대해 비트 "and"(&)를 수행합니다.
fetch_or 지정된 값과 저장된 값에 대해 비트 "or"(|)를 수행합니다.
fetch_sub 지정된 값을 저장된 값에서 뺍니다.
fetch_xor 지정된 값과 저장된 값에 대해 비트 "배타적 또는" (^)를 수행합니다.
is_lock_free 작업 사용 this 이 잠금 해제인지 여부를 atomic 지정합니다. atomic 해당 형식에 대한 작업에서 잠금을 사용하지 않는 경우 형식은 잠금이 해제 atomic 됩니다.
load 저장된 값을 읽고 반환합니다.
store 지정된 값을 사용하여 저장된 값을 바꿉니다.

설명

Ty 형식은 일반적으로 복사 가능해야 합니다. 즉, 바이트를 복사하는 데 사용하면 memcpy 원래 개체와 동일한 유효한 Ty 개체를 생성해야 합니다. compare_exchange_weakcompare_exchange_strong 멤버 함수는 두 Ty 값이 같은지 여부를 확인하는 데 사용합니다memcmp. 이러한 함수는 -definedoperator==Ty사용하지 않습니다. atomic의 멤버 함수는 memcpy를 사용하여 Ty 형식의 값을 복사합니다.

부분 특수화 atomic<Ty*>는 모든 포인터 형식에 대해 존재합니다. 특수화를 사용하면 관리되는 포인터 값에 오프셋을 더하거나 값에서 오프셋을 뺄 수 있습니다. 산술 연산은 ptrdiff_t 형식의 인수를 가져와서 Ty의 크기에 따라 일반 주소 산술과 일관되게 조정합니다.

특수화는 bool을 제외한 모든 정수 형식에 대해 존재합니다. 각 특수화에서는 원자 산술 및 논리 연산을 위한 다양한 방법을 제공합니다.

atomic<char>
atomic<signed char>
atomic<unsigned char>
atomic<char16_t>
atomic<char32_t>
atomic<wchar_t>
atomic<short>

atomic<unsigned short>
atomic<int>
atomic<unsigned int>
atomic<long>
atomic<unsigned long>
atomic<long long>
atomic<unsigned long long>

정수 특수화는 해당 atomic_integral 형식에서 파생됩니다. 예를 들어 atomic<unsigned int>atomic_uint에서 파생됩니다.

요구 사항

머리글: <atomic>

네임스페이스: std

atomic::atomic

atomic 개체를 생성합니다.

atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;

매개 변수

Value
초기화 값입니다.

설명

원자성 개체는 복사하거나 이동할 수 없습니다.

인스턴스화 atomic<Ty> 되는 개체는 집계 초기화를 사용하지 않고 형식 Ty 의 인수를 사용하는 생성자에서만 초기화할 수 있습니다. 그러나 atomic_integral 집계 초기화를 사용하여 개체를 초기화할 수 있습니다.

atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);

atomic::operator Ty

템플릿 atomic<Ty>에 지정된 형식의 연산자입니다. 에 저장된 값을 검색합니다 *this.

atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;

설명

이 연산자는 .를 memory_order_seq_cst memory_order적용합니다.

atomic::operator=

지정된 값을 저장합니다.

Ty operator=(
   Ty Value
) volatile noexcept;
Ty operator=(
   Ty Value
) noexcept;

매개 변수

Value
Ty 개체입니다.

Return Value

Value을(를) 반환합니다.

atomic::operator++

저장된 값을 증가시킵니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.

Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;

Return Value

처음 두 연산자는 증가된 값을 반환합니다. 마지막 두 연산자는 증분 전에 값을 반환합니다. 연산자는 .를 memory_order_seq_cst memory_order사용합니다.

atomic::operator+=

지정된 값을 저장된 값에 더합니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.

Ty atomic<Ty>::operator+=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
   Ty Value
) noexcept;

매개 변수

Value
정수 또는 포인터 값입니다.

Return Value

Ty 추가 결과를 포함하는 개체입니다.

설명

이 연산자는 .를 memory_order_seq_cst memory_order사용합니다.

atomic::operator--

저장된 값 를 줄입니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.

Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;

Return Value

처음 두 연산자는 감소된 값을 반환합니다. 마지막 두 연산자는 감소하기 전에 값을 반환합니다. 연산자는 .를 memory_order_seq_cst memory_order사용합니다.

atomic::operator-=

지정된 값을 저장된 값에서 뺍니다. 정수 계열 및 포인터 특수화에서만 사용됩니다.

Ty atomic<Ty>::operator-=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
   Ty Value
) noexcept;

매개 변수

Value
정수 또는 포인터 값입니다.

Return Value

Ty 빼기 결과를 포함하는 개체입니다.

설명

이 연산자는 .를 memory_order_seq_cst memory_order사용합니다.

atomic::operator&=

지정된 값과 저장된 값에 대해 비트 "and" (&)를 *this수행합니다. 정수 계열 특수화에서만 사용됩니다.

atomic<Ty>::operator&= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
   Ty Value
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Return Value

비트 "and"(&)의 결과입니다.

설명

이 연산자는 읽기-수정-쓰기 작업을 수행하여 저장된 값을 *this 비트 "and"(&)와 Value 저장된 *this현재 값(의 제약 조건 내에서)으로 바꿉니다 memory_order_seq_cst memory_order.

atomic::operator|=

지정된 값과 저장된 값에 대해 비트 "or" (|)를 *this수행합니다. 정수 계열 특수화에서만 사용됩니다.

atomic<Ty>::operator|= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
   Ty Value
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Return Value

비트 "or"(|)의 결과입니다.

설명

이 연산자는 읽기-수정-쓰기 연산을 수행하여 저장된 값을 제약 조건의 *this 제약 조건 내에서 비트 "or"(|) 및 Value 저장된 *this현재 값으로 바꿉니다 memory_order_seq_cst memory_order .

atomic::operator^=

지정된 값과 저장된 값에 대해 비트 "배타적 또는" (^)를 *this수행합니다. 정수 계열 특수화에서만 사용됩니다.

atomic<Ty>::operator^= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
   Ty Value
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Return Value

비트 "exclusive or"(^)의 결과입니다.

설명

이 연산자는 읽기-수정-쓰기 작업을 수행하여 저장된 값을 제약 조건의 *this 제약 조건 내에서 비트 "배타적 또는"(^) 및 Value 저장된 *this현재 값으로 바꿉니다 memory_order_seq_cst memory_order .

atomic::compare_exchange_strong

에 대한 원자 비교 및 교환 작업을 수행합니다 *this.

bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) noexcept;

매개 변수

Exp
Ty 형식의 값입니다.

Value
Ty 형식의 값입니다.

Order1
첫 번째 memory_order 인수입니다.

Order2
두 번째 memory_order 인수입니다.

Return Value

값 비교 결과를 나타내는 bool입니다.

설명

이 원자 비교 및 교환 작업은 에 저장된 *this Exp값을 비교합니다. 값이 같으면 작업은 read-modify-write 작업을 사용하고 지정된 메모리 순서 제약 조건을 적용하여 저장된 *this Value 값을 바꿉니다 Order1. 값이 같지 않으면 작업은 저장된 *this 값을 사용하여 대체 Exp 하고 지정된 메모리 순서 제약 조건을 적용합니다 Order2.

두 번째 memory_order 오버로드는 값을 Order1기반으로 하는 암시적 Order2 을 사용합니다. Order1memory_order_acq_rel면, Order2memory_order_acquire입니다. Order1memory_order_release면, Order2memory_order_relaxed입니다. 다른 모든 경우에서는 Order2 같음 Order1입니다.

두 매개 memory_order 변수를 사용하는 오버로드의 Order2 경우 값은 값이 아니 memory_order_release 어야 memory_order_acq_rel하며 값보다 Order1강해서는 안 됩니다.

atomic::compare_exchange_weak

에 대해 약한 원자 비교 및 교환 작업을 수행합니다 *this.

bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) noexcept;

매개 변수

Exp
Ty 형식의 값입니다.

Value
Ty 형식의 값입니다.

Order1
첫 번째 memory_order 인수입니다.

Order2
두 번째 memory_order 인수입니다.

Return Value

값 비교 결과를 나타내는 bool입니다.

설명

이 원자 비교 및 교환 작업은 에 저장된 *this Exp값을 비교합니다. 값이 같으면 작업은 read-modify-write 작업을 사용하고 지정된 메모리 순서 제약 조건을 적용하여 저장된 *this Value 값을 바꿉니다 Order1. 값이 같지 않으면 작업은 저장된 *this 값을 사용하여 대체 Exp 하고 지정된 메모리 순서 제약 조건을 적용합니다 Order2.

약한 원자 비교 및 교환 작업은 비교된 값이 같은 경우 교환을 수행합니다. 값이 같지 않으면 작업이 교환을 수행하도록 보장되지 않습니다.

두 번째 memory_order 오버로드는 값을 Order1기반으로 하는 암시적 Order2 을 사용합니다. Order1memory_order_acq_rel면, Order2memory_order_acquire입니다. Order1memory_order_release면, Order2memory_order_relaxed입니다. 다른 모든 경우에서는 Order2 같음 Order1입니다.

두 매개 memory_order 변수를 사용하는 오버로드의 Order2 경우 값은 값이 아니 memory_order_release 어야 memory_order_acq_rel하며 값보다 Order1강해서는 안 됩니다.

atomic::exchange

지정된 값을 사용하여 저장된 값을 대체합니다 *this.

Ty atomic<Ty>::exchange(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::exchange(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Order
memory_order.

Return Value

교환하기 전 *this에 저장된 값입니다.

설명

이 작업은 지정된 메모리 제약 조건 내에서 저장된 *this값을 바꾸는 데 사용할 Value 읽기-수정-쓰기 작업을 수행합니다Order.

atomic::fetch_add

저장된 *this값을 가져온 다음 저장된 값에 지정된 값을 추가합니다.

Ty atomic<Ty>::fetch_add (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_add (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Order
memory_order.

Return Value

Ty 추가하기 전에 저장된 값이 들어 있는 *this 개체입니다.

설명

이 메서드는 fetch_add 읽기-수정-쓰기 작업을 수행하여 저장된 값에 *this원자성으로 추가하고 Value 지정된 메모리 제약 조건을 적용합니다Order.

atomic::fetch_and

에 저장된 값 및 기존 값에 대해 비트 "and"(&)를 수행합니다 *this.

Ty atomic<Ty>::fetch_and (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_and (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Order
memory_order.

Return Value

Ty 비트 "and"(&)의 결과를 포함하는 개체입니다.

설명

이 메서드는 fetch_and 읽기-수정-쓰기 작업을 수행하여 저장된 값을 *this 지정된 메모리 제약 조건 내에서 비트 "and"(&) 및 Value 저장된 *this현재 값으로 바꿉니다 Order.

atomic::fetch_or

에 저장된 *this값 및 기존 값에 대해 비트 "or" (|)를 수행합니다.

Ty atomic<Ty>::fetch_or (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_or (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Order
memory_order.

Return Value

Ty 비트 "or"(|)의 결과를 포함하는 개체입니다.

설명

이 메서드는 fetch_or 읽기-수정-쓰기 작업을 수행하여 저장된 값을 *this 지정된 메모리 제약 조건 내에서 비트 "or"(|) 및 Value 저장된 *this현재 값으로 바꿉니다 Order.

atomic::fetch_sub

지정된 값을 저장된 값에서 뺍니다.

Ty atomic<Ty>::fetch_sub (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_sub (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Order
memory_order.

Return Value

Ty 빼기 결과를 포함하는 개체입니다.

설명

이 메서드는 fetch_sub 지정된 메모리 제약 조건 내에서 저장된 값*this에서 원자성으로 빼 Value 기 위해 읽기-수정-쓰기 작업을 수행합니다Order.

atomic::fetch_xor

에 저장된 값 및 기존 값에 대해 비트 "배타적 또는" (^)를 수행합니다 *this.

Ty atomic<Ty>::fetch_xor (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_xor (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

매개 변수

Value
Ty 형식의 값입니다.

Order
memory_order.

Return Value

Ty 비트 "exclusive or"(^)의 결과를 포함하는 개체입니다.

설명

이 메서드는 fetch_xor 읽기-수정-쓰기 작업을 수행하여 저장된 값을 *this 비트 "배타적 또는"(^)의 Value 값과 저장된 *this현재 값으로 바꾸고 지정한 메모리 제약 조건을 적용합니다 Order.

atomic::is_lock_free

작업 사용 *this 이 잠금 해제인지 여부를 atomic 지정합니다.

bool is_lock_free() const volatile noexcept;

Return Value

true 작업이 잠금 해제되어 있으면 atomic /> *this 이고, false그렇지 않으면 .

설명

atomic 해당 형식에 대한 작업에서 잠금을 사용하지 않는 경우 형식은 잠금이 해제 atomic 됩니다.

atomic::load

지정된 메모리 제약 조건 내에서 저장된 값을 *this검색합니다.

Ty atomic::load(
   memory_order Order = memory_order_seq_cst
) const volatile noexcept;
Ty atomic::load(
   memory_order Order = memory_order_seq_cst
) const noexcept;

매개 변수

Order
memory_order. Ordermemory_order_release/a0>이 아니어야 합니다.memory_order_acq_rel

Return Value

*this에 저장된 검색된 값입니다.

atomic::store

지정된 값을 저장합니다.

void atomic<Ty>::store(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
void atomic<Ty>::store(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

매개 변수

Value
Ty 개체입니다.

Order
제약 조건입니다 memory_order .

설명

이 멤버 함수는 에 지정된 Order메모리 제약 조건 내에 원자성으로 저장 Value *this됩니다.

참고 항목

<atomic>
헤더 파일 참조