atomic_compare_exchange_weak, atomic_compare_exchange_strong, atomic_compare_exchange_weak_explicit, atomic_compare_exchange_strong_explicit
|
헤더 파일에 정의됨
<stdatomic.h>
|
||
|
_Bool atomic_compare_exchange_strong
(
volatile
A
*
obj,
C * expected, C desired ) ; |
(1) | (C11 이후) |
|
_Bool atomic_compare_exchange_weak
(
volatile
A
*
obj,
C * expected, C desired ) ; |
(2) | (C11 이후) |
|
_Bool atomic_compare_exchange_strong_explicit
(
volatile
A
*
obj,
C
*
expected, C desired,
|
(3) | (C11 이후) |
|
_Bool atomic_compare_exchange_weak_explicit
(
volatile
A
*
obj,
C
*
expected, C desired,
|
(4) | (C11 이후) |
obj
가 가리키는 메모리의 내용과
expected
가 가리키는 메모리의 내용을 원자적으로 비교하여, 비트 단위로 동일할 경우 전자를
desired
로 교체합니다(읽기-수정-쓰기 작업 수행). 그렇지 않을 경우,
obj
가 가리키는 메모리의 실제 내용을
*expected
에 로드합니다(로드 작업 수행).
읽기-수정-쓰기 및 로드 연산에 대한 메모리 모델은 각각
succ
과
fail
입니다. (1-2) 버전은 기본적으로
memory_order_seq_cst
를 사용합니다.
함수의 약한 형태((2)와 (4))는 가짜 실패(spuriously fail)가 허용됩니다. 즉, * obj ! = * expected 인 경우처럼 동작할 수 있습니다. compare-and-exchange 연산이 루프 내에 있을 때, 약한 버전은 일부 플랫폼에서 더 나은 성능을 제공합니다. 약한 compare-and-exchange가 루프를 필요로 하고 강한 버전이 그렇지 않은 경우에는 강한 버전이 더 바람직합니다.
이것은 모든
generic function
에 대해 정의된
atomic object types
A
입니다. 인자는 volatile 및 비-volatile 원자 객체의 주소를 모두 수용하기 위해 volatile 원자 타입에 대한 포인터이며,
volatile
원자 객체에 이 연산을 적용할 때 volatile 의미론이 유지됩니다.
C
는
A
에 해당하는 비-원자 타입입니다.
제네릭 함수의 이름이 매크로인지 외부 링크를 가진 식별자로 선언되었는지는 명시되지 않습니다. 실제 함수에 접근하기 위해 매크로 정의를 억제하는 경우(예: ( atomic_compare_exchange ) ( ... ) 와 같이 괄호로 묶은 경우), 또는 프로그램이 제네릭 함수의 이름으로 외부 식별자를 정의하는 경우, 그 동작은 정의되지 않습니다.
목차 |
매개변수
| obj | - | 테스트 및 수정할 atomic 객체에 대한 포인터 |
| expected | - | atomic 객체에서 발견될 것으로 예상되는 값에 대한 포인터 |
| desired | - | 예상과 일치할 경우 atomic 객체에 저장할 값 |
| succ | - | 비교가 성공할 경우 읽기-수정-쓰기 연산에 대한 메모리 동기화 순서. 모든 값이 허용됨. |
| fail | - |
비교가 실패할 경우 로드 연산에 대한 메모리 동기화 순서.
memory_order_release
또는
memory_order_acq_rel
일 수 없으며
succ
보다 강한 순서를 지정할 수 없음
|
반환값
비교 결과:
true
는
*obj
가
*exp
와 같았던 경우,
false
는 그 외의 경우입니다.
참고 사항
atomic_compare_exchange_*
계열의 동작은 다음과 같이 원자적으로 실행된 것과 같습니다:
참고문헌
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.17.7.4 atomic_compare_exchange 제네릭 함수 (p: 207)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.17.7.4 atomic_compare_exchange 제네릭 함수 (p: 283-284)
참고 항목
|
원자적 객체의 값과 값을 교환합니다
(함수) |
|
|
C++ documentation
for
atomic_compare_exchange_weak
,
atomic_compare_exchange_strong
,
atomic_compare_exchange_weak_explicit
,
atomic_compare_exchange_strong_explicit
|
|