> 백엔드 개발 > C++ > 원자적 읽기-수정-쓰기는 단일 작업입니까 아니면 일련의 획득-해제 작업입니까?

원자적 읽기-수정-쓰기는 단일 작업입니까 아니면 일련의 획득-해제 작업입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-01 14:06:13
원래의
805명이 탐색했습니다.

Is an Atomic Read-Modify-Write a Singular Operation or a Sequence of Acquire-Release Operations?

원자적 읽기-수정-쓰기에서 단일 작업과 개별 작업 구별

메모리 순서의 맥락에서 원자적 읽기-수정-쓰기(RMW) 동작 std::memory_order_acq_rel을 사용하는 x.exchange(...)와 같은 작업은 다음과 같은 질문을 제기합니다. 이 작업이 처리됩니까? 획득-릴리스 의미 체계를 갖춘 단일 엔터티로 또는 획득 로드와 릴리스 저장소로 구성된 일련의 작업으로 구성됩니까?

표준 관점: 단일 작업

에 따르면 C 표준에서는 RMW 작업이 단일 작업으로 간주됩니다. 이러한 의미는 단수형을 사용하는 이름과 표준 관련 표현에서 비롯됩니다. 따라서 이 맥락에서 x.exchange(...) 작업은 단일 엔터티로 간주됩니다.

주문 의미: 잠재적 재정렬

표준의 관점에서 보면 제공된 코드는 0, 1을 출력할 가능성이 있습니다. 이러한 가능성은 표준이 작업 재정렬 측면에서 정의되지 않고 오히려 동기화 측면에서 정의되기 때문에 발생합니다. 릴리스 및 획득 작업 간의 관계.

구체적으로 y.load(acquire) 작업에는 일치하는 릴리스 또는 더 강한 저장소가 없습니다. 따라서 다른 작업과 동기화되지 않으며 완화된 로드(y.load(relaxed))로 효과적으로 처리됩니다.

또한 x.exchange(1, acq_rel) 작업의 "acquire" 구성 요소는 동기화되지 않습니다. 동기화할 저장소가 없으므로 획득 의미 체계가 효과적으로 완화됩니다. 이는 x.store(1, release) 작업으로 효과적으로 변환됩니다.

각 스레드의 x에 대한 저장 전과 로드 후에는 작업이 없으므로 이러한 작업 간의 잠재적인 동기화가 중복됩니다. 결과적으로 두 로드 모두 0 또는 1을 반환할 수 있으므로 출력 0, 1이 허용됩니다.

결론

C 표준의 관점에서 원자 읽기- 수정-쓰기 작업은 단일 작업으로 간주됩니다. 이러한 이해는 제공된 예에서 로드와 저장소 간의 동기화 부족으로 인해 코드가 0, 1을 인쇄할 가능성이 있음을 의미합니다.

위 내용은 원자적 읽기-수정-쓰기는 단일 작업입니까 아니면 일련의 획득-해제 작업입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿