操作、ステートメントおよびInterlocked
フィールド比較lock
volatile
質問:
クラスには、複数のスレッドでアクセスされ、操作の増加または削減のみでアクセスされるパブリックのタイプのカウンターフィールドが含まれていると仮定します。このフィールドを増やすための最良の方法はどの方法ですか、なぜですか?
int
lock(this.locker) this.counter ;
に変更します。 Interlocked.Increment(ref this.counter);
回答:public volatile
最悪(不可能):カウンターのカウンターデコレーションを
に変更します
public volatile
ステートメントは、他のスレッドが保護フィールドのコードを実行するのを防ぐことにより、スレッドセキュリティを提供します。ただし、ロックは比較的遅く、他のスレッドをブロックする必要はありません。 volatile
volatile
best:
lock(this.locker) this.counter ;
フィールドの比較:lock
完全なフェンスの実行で実行される操作の動作は、複数のCPUがソートされないように使用されます。 フィールドは、操作の周りにのみセミフェンスの周りに配置されているため、再ソートを妨げません。したがって、共有データを同時に変更するには、操作を使用する必要があります。
以上が「ロック」、「インターロック」、または「揮発性」という複数のスレッドにわたって共有整数カウンターを増やすための最適なアプローチはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。