이 질문은 32비트 원자 정수에서 64비트 원자 카운터를 만드는 방법에 대해 자세히 설명합니다. 카운터에는 단일 작성자와 여러 판독기가 있으며, 작성자는 차단해서는 안 되는 신호 처리기입니다.
제안된 솔루션은 낮은 비트를 읽기 잠금으로 사용하는 세대 카운트를 사용합니다. 리더는 읽기 전반에 걸쳐 세대 수가 안정되고 낮은 비트가 설정되지 않을 때까지 재시도합니다.
제공되는 코드는 일반적으로 알려진 SeqLock의 올바른 설계 원칙을 따릅니다. 시퀀스 번호를 사용하여 잠금 없는 원자 카운터를 구현하기 위한 패턴입니다. 메모리 순서 사용은 건전하여 카운터가 원자적으로 업데이트되도록 보장합니다.
그러나 다음과 같은 경우 페이로드 증가를 위해 원자 RMW 연산을 사용하는 것이 불필요하다는 점은 주목할 가치가 있습니다. 시스템은 더 저렴한 64비트 원자 추가 또는 로드를 지원합니다. 대신, 양쪽 절반을 간단히 로드한 후 비원자 증가 및 결과의 원자 저장으로 충분합니다.
또한 시퀀스 카운터는 스핀록으로 사용되지 않는 한 원자 RMW 작업을 피할 수도 있습니다. 여러 작가. 단일 작성자를 사용하면 원자 RMW 또는 seq_cst 순서를 사용하는 저장소보다 더 효율적인 릴리스 순서를 사용하는 순수 로드 및 순수 저장소를 사용할 수 있습니다.
원자
또 다른 대안은 대상이 원자
결론적으로 제공된 코드는 32비트 원자를 사용하는 64비트 원자 카운터의 기능적 구현을 제시하지만, 성능을 향상시키고 코드를 단순화할 수 있는 잠재적인 최적화 및 대안이 있습니다.
위 내용은 32비트 원자만을 사용하여 64비트 원자 카운터를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!