>백엔드 개발 >C++ >C 원자 읽기-수정-쓰기 작업은 획득-해제 의미 체계를 갖춘 단일 작업입니까, 아니면 로드 및 저장 시퀀스입니까?

C 원자 읽기-수정-쓰기 작업은 획득-해제 의미 체계를 갖춘 단일 작업입니까, 아니면 로드 및 저장 시퀀스입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-07 19:22:13311검색

Are C   Atomic Read-Modify-Write Operations Single Operations with Acquire-Release Semantics, or a Sequence of Loads and Stores?

원자적 읽기-수정-쓰기 작업을 통한 메모리 순서 지정

C에서는 x와 같은 원자적 읽기-수정-쓰기(RMW) 작업 .exchange()는 다른 로드 및 저장과 관련하여 특정 순서 보장을 시행합니다. 이러한 작업이 고려되는지 여부에 대한 의문이 생깁니다.

  1. 획득-릴리스 의미 체계를 갖춘 단일 작업
  2. 추가 보장이 있는 릴리스 스토어가 뒤따르는 획득 로드

표준 관점

C 표준에 따르면, RMW 작업은 단일 작업으로 처리됩니다. 이는 단수 이름 및 관련 문구에서 암시됩니다.

ARM64 구현

ARM64에서 RMW 작업은 일련의 로드, 원자 교환 및 저장 명령어로 구현됩니다. . 이론적으로 이 구현을 사용하면 원자 교환 전에 저장 명령이 표시될 수 있지만 표준의 메모리 순서 보장에는 영향을 미치지 않습니다.

메모리 동기화

C의 메모리 동기화 주로 릴리스 작업과 획득 작업 간의 동기화 관계를 기반으로 합니다. 제공된 코드 예에서:

  • x.exchange(1, std::memory_order_acq_rel): x에 대한 후속 저장이 없기 때문에 동기화-와의 관계 획득은 중요하지 않습니다.
  • x.load(std::memory_order_acquire): x에 대한 로드는 어떤 것과도 동기화되지 않으므로 효과적으로 수행됩니다.

동기화 분석

동기화할 다른 작업이 없으므로 다음 순서가 발생합니다.

  1. 저장 y에게
  2. y에 로드 (릴렉스)
  3. Load on x (릴렉스)

가능한 출력

따라서 코드는 실제로 0, 1을 출력할 수 있습니다. 표준의 관점에서는 RMW 작업이 추가 보장 없이 단일 작업이므로 이러한 출력이 가능하다는 것을 의미합니다.

위 내용은 C 원자 읽기-수정-쓰기 작업은 획득-해제 의미 체계를 갖춘 단일 작업입니까, 아니면 로드 및 저장 시퀀스입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.