memory_order_relaxed로 검사한 경우 중지 플래그 설정을 위해 memory_order_seq_cst를 활용하는 이유는 무엇입니까?
Herb Sutter는 "원자 무기" 프레젠테이션에서 다음을 소개합니다. 시나리오를 포함한 원자 변수 사용법 관련:
중지 플래그를 확인하는 작업자:
while (!stop.load(std::memory_order_relaxed)) { // Perform tasks }
Sutter는 다음과 같이 주장합니다. 스레드 중지 지연에 미치는 영향이 최소화되므로 플래그 확인을 위해 memory_order_relaxed를 사용하는 것이 허용됩니다. 그러나 중지 플래그 설정에 memory_order_seq_cst를 사용하는 이유는 여전히 불분명합니다.
분석:
mo_relaxed는 중지 플래그 로드 및 저장 모두에 충분합니다.
더 강한 것을 활용해도 지연 시간이 크게 이점이 없습니다. stop 또는 keep_running 플래그의 변경 사항을 관찰하는 대기 시간이 중요하더라도 메모리 주문은 중요합니다.
Sutter가 편안한 매장 운영을 권장하지 않는 이유는 확실하지 않습니다. 그러나 ISO C 표준은 매장 가시성 시기나 이에 영향을 미치는 요인을 지정하지 않습니다. 구현은 한정된 기간 내에 가시성을 보장하도록 의무화됩니다.
스레드 간 지연 시간 및 구현:
스레드 간 지연 시간은 주로 구현에 의해 결정됩니다. 실제 C 구현은 하드웨어 캐시 일관성 메커니즘을 활용하여 일반적으로 매장 가시성을 위한 낮은 대기 시간(수십 나노초)을 제공합니다.
seq_cst나 완화된 메모리 주문 모두 매장 가시성을 촉진하지 않습니다. 단지 저장이나 로드와 관련된 후속 작업의 동작을 제어할 뿐입니다. 더 강한 명령은 이벤트를 가속화하지 않지만 지정된 순서가 유지될 때까지 다른 작업을 지연시킵니다.
느슨한 가시성 및 하드웨어 캐시 일관성:
캐시 일관성, 메모리가 있는 실제 하드웨어에서 주문은 매장 가시성 타이밍을 향상시키지 않습니다. 이는 스토어 확정 전에 전역적으로 표시되도록 후속 작업의 기능을 단독으로 관리합니다.
중지 플래그에 대한 완화된 메모리 순서의 이점:
완화된 메모리 순서의 주요 이점 중지 플래그를 확인하는 방법은 다음과 같습니다.
결론:
이 시나리오에서는 memory_order_relaxed가 로드 및 저장 모두에 적합합니다. 정지 플래그. 매장 가시성 타이밍을 향상시키기 위해 memory_order_seq_cst는 필요하지 않습니다. 대신, 후속 작업의 원하는 순서를 적용하고 동시 작성자 관련 문제를 방지하는 데 사용됩니다.
위 내용은 `memory_order_relaxed`로 확인된 중지 플래그를 설정하기 위해 `memory_order_seq_cst`를 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!