> 백엔드 개발 > C++ > C/C 표준은 ARM 및 x86-64 아키텍처의 모든 데이터 유형에 대한 원자적 연산을 보장합니까?

C/C 표준은 ARM 및 x86-64 아키텍처의 모든 데이터 유형에 대한 원자적 연산을 보장합니까?

DDD
풀어 주다: 2024-12-15 14:29:31
원래의
443명이 탐색했습니다.

Do C/C   Standards Guarantee Atomic Operations for Any Data Type on ARM and x86-64 Architectures?

ARM 및 x86-64: 보장된 원자 유형 없음

초기 가정과 달리 C/C 언어 표준은 다음을 보장하지 않습니다. 64비트에서도 특정 데이터 유형에 대한 원자적 연산

신호와 스레드를 통한 원자 액세스

두 가지 원자성 개념을 구별하는 것이 중요합니다.

  • 원자성 신호와 관련하여: 신호 안전을 보장하여 신호 중단 후 업데이트된 값을 올바르게 읽을 수 있도록 합니다. 동일한 스레드 내에서.
  • 스레드에 대한 원자성: 여러 스레드에서 데이터 일관성을 보장하여 동시 액세스 중 손상을 방지합니다.

GCC ARM 및 x86-64에서 구현

ARMv8 및 x86-64와 같은 최신 CPU는 x86-64는 특정 작업에 대한 원자 액세스를 보장할 수 있지만 이러한 보장은 언어 수준에서는 반영되지 않습니다. GCC 및 기타 컴파일러는 다음 예에서 볼 수 있듯이 이러한 하드웨어 수준 원자성을 위반하는 방식으로 코드를 최적화할 수 있습니다.

volatile uint32_t x;

uint32_t foo(void) {
    return (x >> 8) & 0xffff;
}
로그인 후 복사

x가 32비트 변수이더라도 GCC는 foo를 두 개의 별도 16으로 컴파일합니다. -비트 로드. x가 동시에 수정되면 비원자적 읽기가 발생할 수 있습니다.

다음에 의존합니다. std::atomic 또는 _Atomic

C 및 C에서 원자성 작업을 보장하는 유일한 방법은 필요한 동기화를 제공하는 std::atomic(C) 또는 _Atomic(C) 유형을 명시적으로 사용하는 것입니다. 스레드로부터 안전한 액세스를 보장하는 메커니즘.

위 내용은 C/C 표준은 ARM 및 x86-64 아키텍처의 모든 데이터 유형에 대한 원자적 연산을 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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