> 백엔드 개발 > C++ > C 정수는 다중 스레드 환경에서 원자적으로 읽고 쓰나요?

C 정수는 다중 스레드 환경에서 원자적으로 읽고 쓰나요?

Barbara Streisand
풀어 주다: 2024-12-02 12:02:11
원래의
749명이 탐색했습니다.

Are C   Integer Reads and Writes Atomic in Multithreaded Environments?

C는 Int 원자의 읽기 및 쓰기입니까? [중복]

질문:

한 스레드는 업데이트하고 다른 스레드는 정수를 읽는 다중 스레드 애플리케이션에서 이에 대한 액세스를 동기화해야 합니까? 다중 바이트 값? 부분 쓰기가 완료되기 전에 중단되어 읽기가 불완전한 값을 캡처할 수 있습니까?

답변:

C에서 정수 읽기 및 쓰기의 원자성은 다음과 같습니다. 건축에 관해서 system.

세부 정보:

  • IA32 시스템: 올바르게 정렬된 주소에는 원자성 읽기 및 쓰기가 포함됩니다. 정렬되지 않은 쓰기는 캐시에 따라 원자성일 수 있습니다.
  • 캐싱: 메모리가 단일 L1 캐시 라인 내에 있는 경우 쓰기는 원자성입니다. 그렇지 않다면 그렇지 않을 수도 있습니다.
  • 버스 폭: 데이터 버스의 폭은 원자성에 영향을 미칩니다. 일부 이전 시스템에서는 정렬되지 않은 주소에 대한 16비트 쓰기가 원자적이지 않았지만 버스가 더 넓은 시스템에서는 원자적이지 않았습니다.
  • 컴파일러 최적화: C/C에서는 다음을 표시하는 것이 중요합니다. 최적화 프로그램이 한 번에 업데이트되지 않는다고 가정하는 것을 방지하기 위해 공유 값을 휘발성으로 설정합니다. thread.

결론:

동기화가 필요한지 여부는 프로세서 아키텍처, 메모리 레이아웃, 컴파일러 최적화 등의 요소에 따라 달라집니다. 일반적으로 특히 읽기 및 쓰기 순서가 관련된 중요한 섹션에서는 공유 멀티바이트 값에 대한 액세스를 동기화하는 것이 좋습니다.

위 내용은 C 정수는 다중 스레드 환경에서 원자적으로 읽고 쓰나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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