> 백엔드 개발 > C++ > 여러 스레드에서 공유 정수 카운터를 증가시키기위한 최적의 접근법입니다.`lock`,`Interlocked` 또는 'volatile'?

여러 스레드에서 공유 정수 카운터를 증가시키기위한 최적의 접근법입니다.`lock`,`Interlocked` 또는 'volatile'?

Linda Hamilton
풀어 주다: 2025-01-27 10:51:13
원래의
393명이 탐색했습니다.

Which is the Optimal Approach for Incrementing a Shared Integer Counter Across Multiple Threads: `lock`, `Interlocked`, or `volatile`?
작동, 명령문 및

필드 비교 >> 질문 :

클래스에 대중의 카운터 필드 유형이 포함되어 있다고 가정합니다.이 카운터 필드 유형은 여러 스레드에 의해 액세스되며 운영 만 증가 또는 감소합니다. 이 필드를 늘리는 가장 좋은 방법은 무엇입니까? Interlocked lock volatile 카운터의 카운터 장식을 로 변경하십시오.

답변 : 최악 (실현 가능하지 않음) :

카운터의 카운터 장식을

int로 변경하십시오.

필드를 사용하면 스레드 보안을 보장 할 수 없습니다. 여러 CPU가 동시에 동일한 데이터에 동시에 액세스하도록 보장하기 위해서는 가 동시에 동일한 데이터에 액세스 할 수 있지만, 판독 및 쓰기 작업의 인터레이스가 오류를 일으킬 수있는 경우를 방지 할 수는 없습니다.
    시간 :
  • lock(this.locker) this.counter ;
  • Interlocked.Increment(ref this.counter); 진술은 다른 스레드가 보호 필드의 코드를 수행하는 것을 방지함으로써 스레드 보안을 제공합니다. 그러나 잠금은 상대적으로 느리고 다른 스레드를 차단하기에 불필요 할 수 있습니다.
  • <:> 최고 :
  • public volatile

작업은 원자이며 스레드는 안전하며 공유 데이터를 수정하는 가장 효과적이고 신뢰할 수있는 방법을 제공합니다. 그들은 잠금없이 한 번의 작업으로 읽기, 증분 및 쓰기 작업을 수행합니다. 작동 및 필드의 비교 :

완전한 울타리 실행에서 수행 된 작업의 작동은 여러 CPU 분류를 방지하는 데 사용됩니다. 필드는 작업 주변에서만 반 -펜스 주위에 배치되므로 재조정을 방해하지 않습니다. 따라서 공유 데이터의 동시 수정을 위해서는

작업이 사용되어야하며, 작가는 절대 읽지 못하고 독자가 원자가 값으로 기록되지 않는 장면을 사용해야합니다.

위 내용은 여러 스레드에서 공유 정수 카운터를 증가시키기위한 최적의 접근법입니다.`lock`,`Interlocked` 또는 'volatile'?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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