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_weak
및 compare_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
을 사용합니다. Order1
이 memory_order_acq_rel
면, Order2
은 memory_order_acquire
입니다. Order1
이 memory_order_release
면, Order2
은 memory_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
을 사용합니다. Order1
이 memory_order_acq_rel
면, Order2
은 memory_order_acquire
입니다. Order1
이 memory_order_release
면, Order2
은 memory_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
작업이 잠금 해제되어 있으면 *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
. Order
은 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
됩니다.