C 11 memory_order_release는 공유 메모리에 쓰기가 표시되기 전에 완료되도록 보장합니다. 다른 스레드에. 마찬가지로, memory_order_acquire는 읽기 작업이 메모리에 기록된 최신 값을 가져오도록 보장합니다.
x86에 대한 문서에 따르면 MOV 명령어만으로도 획득-릴리스 의미 체계를 전달한다고 주장됩니다. 그러나 이 메커니즘이 어떻게 작동하는지에 대한 의문이 생깁니다.
인용된 Intel 문서에서는 읽기 및 쓰기가 단일 프로세서에서 다른 유사한 작업으로 재정렬되지 않는다는 점을 강조합니다. 또한 멀티 코어 섹션에서는 캐시 일관성 공유 메모리에 액세스할 때 프로세서가 동일한 순서 원칙을 따른다고 명시합니다.
획득-릴리스 의미 체계를 이해하는 열쇠는 다음과 같습니다. 재정렬은 각 CPU 코어 내에서 로컬로만 발생한다는 점을 인식합니다. 저장소가 전체적으로 표시되면 모든 코어가 동시에 액세스할 수 있게 되며 그 시점 이전에는 어떤 코어도 이를 인식할 수 없습니다. 따라서 mfence와 같은 로컬 장벽은 후속 로드를 허용하기 전에 저장소 버퍼를 플러시하여 순차적 일관성을 보장합니다.
기본적으로 x86은 일관된 캐시가 전체 메모리에 대한 공유 보기를 제공하는 캐시 일관성 공유 메모리 아키텍처를 활용합니다. 프로세서. 메모리 액세스의 일관된 특성은 프로그램 순서와 저장 버퍼만으로 획득-릴리스 의미 체계를 구현하기에 충분한 단일 코어 메모리 모델을 강화합니다.
획득 원칙 - 릴리스 및 장벽 구현은 x86 이상으로 확장됩니다. 일반적으로 약한 메모리 모델은 로컬 재정렬만 허용하므로 특정 순서를 적용하려면 CPU 코어 내에 장벽이 필요합니다.
PowerPC는 예외로, 저장소가 다른 코어보다 먼저 일부 코어에 표시되도록 허용하여 IRIW( 독립적 쓰기의 독립적 읽기) 재정렬. 그러나 대부분의 하드웨어 메모리 모델은 IRIW 재정렬을 금지하여 모든 코어에서 글로벌 스토어 주문을 보장합니다.
위 내용은 간단한 MOV 명령어는 x86에서 릴리스-획득 의미를 어떻게 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!