전역 변수에 동시에 액세스하는 시나리오 서로 다른 코어에 여러 스레드가 있는 경우 원자 및 휘발성 사용의 의미를 고려하는 것이 중요합니다. 변수.
휘발성 키워드
휘발성 키워드는 컴파일러가 변수에 대한 메모리 작업을 최적화하지 않도록 하여 프로세서가 항상 메모리에서 직접 값을 읽도록 합니다. 그러나 휘발성은 직접적인 메모리 액세스를 보장하지만 원자 액세스를 의미하지는 않습니다.
원자 데이터 유형
표준 C 11에는 으로 표시된 원자 데이터 유형이 포함됩니다. . 이러한 유형은 원자성 작업을 제공합니다. 즉, 각 작업은 다른 스레드의 간섭 없이 실행되도록 보장됩니다. 이렇게 하면 캐시 불일치와 관계없이 항상 최신 값을 읽을 수 있습니다.
추가 동기화(예: 잠금)가 없는 경우 공유 전역 변수는 가시성과 순서를 나타냅니다. 작업에 사용되는 메모리 순서 매개변수에 의해 결정되는 제약 조건입니다. 기본 순서()는 단일 총 순서를 설정하지만 오래된 값이 여전히 관찰될 수 있습니다.
그러나 읽기-수정-쓰기 작업(예: )은 작업이 항상 최신 값으로 수행됩니다. 이렇게 하면 동일한 변수에 대한 연속적인 읽기-수정-쓰기 작업이 고유하고 순서가 지정된 값의 시퀀스를 반환하게 됩니다.
휘발성 변수는 직접 메모리 액세스를 보장하지만 원자성을 보장하지는 않습니다. 운영. 공유 변수에 대한 안정적인 동시 액세스를 위해서는 원자 데이터 유형()을 적절한 동기화 프리미티브와 함께 사용하여 올바른 프로그램 동작을 보장해야 합니다.
위 내용은 C 11 동시성: 원자 변수와 휘발성 변수를 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!