ホームページ > バックエンド開発 > C++ > 「ロック」、「インターロック」、または「揮発性」という複数のスレッドにわたって共有整数カウンターを増やすための最適なアプローチはどれですか?

「ロック」、「インターロック」、または「揮発性」という複数のスレッドにわたって共有整数カウンターを増やすための最適なアプローチはどれですか?

Linda Hamilton
リリース: 2025-01-27 10:51:13
オリジナル
422 人が閲覧しました

Which is the Optimal Approach for Incrementing a Shared Integer Counter Across Multiple Threads: `lock`, `Interlocked`, or `volatile`?

操作、ステートメントおよびInterlockedフィールド比較lock volatile 質問:

クラスには、複数のスレッドでアクセスされ、操作の増加または削減のみでアクセスされるパブリックのタイプのカウンターフィールドが含まれていると仮定します。このフィールドを増やすための最良の方法はどの方法ですか、なぜですか?

int

  • カウンターのカウンターデコレーションをlock(this.locker) this.counter ;に変更します。
  • Interlocked.Increment(ref this.counter);回答:
  • public volatile最悪(不可能):

カウンターのカウンターデコレーションを

に変更します

のみフィールドを使用することは、スレッドセキュリティを保証することはできません。複数のCPUが同時に同じデータにアクセスできるようにするためには、読み取りおよび書き込み操作のインターレースを防ぐことはできません。これにより、エラーが発生する可能性があります。 時代:

  • public volatile

ステートメントは、他のスレッドが保護フィールドのコードを実行するのを防ぐことにより、スレッドセキュリティを提供します。ただし、ロックは比較的遅く、他のスレッドをブロックする必要はありません。 volatile volatile best:

  • 操作は原子であり、スレッドは安全であり、共有データを変更するための最も効果的で信頼できる方法を提供します。彼らは、ロックせずに1回の操作で読書、増分、および書き込み操作を実行します。 lock(this.locker) this.counter ;
操作と

フィールドの比較:lock

完全なフェンスの実行で実行される操作の動作は、複数のCPUがソートされないように使用されます。 フィールドは、操作の周りにのみセミフェンスの周りに配置されているため、再ソートを妨げません。したがって、共有データを同時に変更するには、操作を使用する必要があります。

以上が「ロック」、「インターロック」、または「揮発性」という複数のスレッドにわたって共有整数カウンターを増やすための最適なアプローチはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート