동시성: C 11 메모리 모델의 원자성과 휘발성 이해
서로 다른 코어에서 동시에 실행되는 여러 스레드가 액세스하는 전역 변수를 생각해 보세요. 각 스레드는 변수에 쓰고 읽을 수 있습니다. 하나의 스레드가 원자 변수에서 오래된 정보를 읽을 수 있습니까?
휘발성과 원자: 구별
원자는 원자 액세스를 의미하지만 휘발성만으로는 그렇지 않습니다. Volatile은 메모리 매핑된 I/O 및 신호 처리와 같은 상황에서 사용됩니다. std::atomic과 쌍을 이루면 중복됩니다. 게다가 원자 액세스 또는 스레드 간 메모리 순서와 관련이 없습니다.
원자 변수를 사용한 메모리 순서 지정
C 11의 std::atomic 라이브러리는 다음을 제공합니다. 원자 정수형,
std::atomic; 일체 포함;
가시성 및 순서 제한은 작업에 제공되는 메모리 순서에 따라 다릅니다.
RMW(읽기-수정-쓰기) 작업: 최신성 보장
exchange(), Compare_exchange_strong() 및 fetch_add(와 같은 RMW 작업 ), 보증을 제공합니다. 항상 가장 최근 값에 따라 작동합니다. 여러 스레드에서 ai.fetch_add(1)에 대한 일련의 호출에서는 중복되거나 누락된 숫자가 반환되지 않습니다. 그러나 스레드는 서로 다른 시점의 값을 볼 수 있습니다.
주의 및 결론
원자적 연산을 이해하는 것이 중요합니다. 프로덕션 코드에서 사용하기 전에 철저한 조사와 코드 검토가 권장됩니다. 잠금은 종종 동시성에 대한 더 접근하기 쉽고 효율적인 접근 방식을 제공합니다.
위 내용은 하나의 스레드가 C 11 원자 변수에서 오래된 데이터를 읽을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!