std:: atomic_... <std::shared_ptr>
|
헤더 파일에 정의됨
<memory>
|
||
|
template
<
class
T
>
bool atomic_is_lock_free ( const std:: shared_ptr < T > * p ) ; |
(1) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
std:: shared_ptr < T > atomic_load ( const std:: shared_ptr < T > * p ) ; |
(2) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_load_explicit
|
(3) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
void atomic_store ( std:: shared_ptr < T > * p, std:: shared_ptr < T > r ) ; |
(4) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
void
atomic_store_explicit
|
(5) |
(C++11 이후)
(C++20에서 사용 중단) (C++26에서 제거됨) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange
|
(6) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange_explicit
|
(7) |
(C++11 이후)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak
|
(8) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong
|
(9) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong_explicit
|
(10) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak_explicit
|
(11) |
(C++11부터)
(C++20에서 사용 중단됨) (C++26에서 제거됨) |
다중 실행 스레드가 동기화 없이 동일한
std::shared_ptr
객체에 접근하고, 이들 접근 중 하나라도
shared_ptr
의 비-const 멤버 함수를 사용하는 경우, 모든 해당 접근이 해당 원자적 접근 함수들의 오버로드(
std::atomic_load
,
std::atomic_store
등)를 통해 수행되지 않으면 데이터 경쟁이 발생합니다.
shared_ptr
의 제어 블록은 스레드 안전함에 유의하십시오: 서로 다른
std::shared_ptr
객체들은
operator
=
또는
reset
과 같은 가변 연산을 사용하여 여러 스레드에서 동시에 접근될 수 있으며, 이러한 인스턴스들이 사본이더라도 내부적으로 동일한 제어 블록을 공유합니다.
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
- 두 포인터가 동등한 경우(동일한 포인터 값을 저장하고, 동일한 객체에 대한 소유권을 공유하거나 둘 다 비어 있는 경우), success 에 지정된 메모리 순서 제약 조건을 사용하여 * p 에 desired 를 할당하고 true 를 반환합니다.
- 두 포인터가 동등하지 않은 경우, failure 에 지정된 메모리 순서 제약 조건을 사용하여 * expected 에 * p 를 할당하고 false 를 반환합니다.
atomic_compare_exchange_weak_explicit
는 가끔 실패할 수 있습니다.
만약 p 가 널 포인터인 경우, 이 함수들의 동작은 모두 정의되지 않습니다.
목차 |
매개변수
| p, expected | - | std::shared_ptr 에 대한 포인터 |
| r, desired | - | std::shared_ptr |
| mo, success, failure | - | std::memory_order 타입의 메모리 순서 선택자 |
예외
이 함수들은 예외를 발생시키지 않습니다.
반환값
참고 사항
이러한 함수들은 일반적으로 뮤텍스를 사용하여 구현되며, 포인터 값을 키로 사용하는 전역 해시 테이블에 저장됩니다.
Concurrency TS
는 이러한 함수들의 사용을 대체하기 위해 원자적 스마트 포인터 클래스
atomic_shared_ptr
와
atomic_weak_ptr
를 제공합니다.
|
이 함수들은 다음 템플릿 특수화를 선호하여 사용 중단되었습니다: std::atomic template: std:: atomic < std:: shared_ptr > 및 std:: atomic < std:: weak_ptr > . |
(C++20부터)
(C++26까지) |
|
이 함수들은 다음 템플릿 특수화를 선호하여 제거되었습니다: std::atomic template: std:: atomic < std:: shared_ptr > 및 std:: atomic < std:: weak_ptr > . |
(C++26부터) |
예제
|
이 섹션은 불완전합니다
이유: 예제 없음 |
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2172 | C++11 | expected 가 널 포인터일 수 있었음 | 이 경우 동작은 정의되지 않음 |
| LWG 2980 | C++11 |
빈
shared_ptr
들은 동등하지 않았음
|
동일한 포인터 값을 저장할 경우 동등함 |
참고 항목
|
(C++11)
|
원자적 타입의 연산이 잠금 없는 방식인지 확인합니다
(함수 템플릿) |
|
(C++11)
(C++11)
|
원자적 객체의 값을 비원자적 인수로 원자적으로 대체합니다
(함수 템플릿) |
|
(C++11)
(C++11)
|
원자적 객체에 저장된 값을 원자적으로 획득합니다
(함수 템플릿) |
|
(C++11)
(C++11)
|
원자적 객체의 값을 비원자적 인수로 원자적으로 대체하고 원자적 객체의 이전 값을 반환합니다
(함수 템플릿) |
|
원자적 객체의 값을 비원자적 인수와 원자적으로 비교하고, 같으면 원자적 교환을 수행하고 다르면 원자적 로드를 수행합니다
(함수 템플릿) |