64비트 컴퓨터의 어떤 유형이 GNU C 및 GNU C에서 자연적으로 원자적입니까?
C11 이상이나 C 11 이상과 달리 다음을 제공합니다. _Atomic 또는 std::atomic 유형을 사용하여 원자성을 보장하지만 C 및 C 언어 표준 자체는 원자성에 대해 보장하지 않습니다. 읽고 씁니다. 대신 원자성 수준은 컴파일러 구현 및 대상 아키텍처에 따라 다릅니다.
x86-64 프로세서에서 Linux를 실행하는 64비트 컴퓨터에서는 다양한 데이터 유형의 자연스러운 원자성이 다릅니다. GNU C 및 GNU C 컴파일러(gcc 및 g)는 특정 유형에 대해 특정 수준의 원자성을 제공합니다.
원자 유형:
-
int: 헤더의 typedef _Atomic_word int가 원자적임을 나타냅니다.
-
__sig_atomic_t: 헤더 원자 정수 유형을 정의하여 비동기 인터럽트가 있는 경우 원자 읽기 및 쓰기를 보장합니다.
비원자 유형:
- int64_t(긴 long)
- uint64_t(부호 없는 long long)
- double(64비트)
- 긴 더블(또한 64비트)
추가 참고 사항:
- 원자성은 원자 증가, 감소 또는 복합이 아닌 원자 읽기 및 쓰기를 나타냅니다.
- 특정 유형은 보장되지만 특정 컨텍스트에서는 원자성이 있지만(예: 휘발성 sig_atomic_t는 신호와 관련하여 원자성임) 스레드와 관련하여 반드시 원자성은 아닙니다.
- 컴파일러는 원자성에 대한 가정을 깨는 방식으로 코드를 최적화할 수 있습니다. 특히 다음과 같은 경우에는 더욱 그렇습니다. 가정은 언어 표준에 명시적으로 명시되어 있지 않습니다.
- 스레드로부터 안전한 동시 액세스를 보장하려면 _Atomic 또는 std::atomic 유형을 명시적으로 사용하는 것이 좋습니다. 추천합니다.
위 내용은 64비트 GNU C/C 시스템에서 기본적으로 원자적인 데이터 유형은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!