0

これには明らかな答えがあるかもしれませんが、とにかく尋ねます。

C# のブロッキング コレクションに相当する変数はありますか? 私が望むのは、すべてのスレッドが共有変数にアクセスできるようにすることです。これはコレクションではなく、各スレッドが使用するたびに値が調整される単なる共有変数です。ブロッキングコレクションについて私が気に入っているのは、クエリとロックが C# によって管理されていることです。変数だけに似たようなものがあることを望んでいましたか?

public static 変数を使用して自分でロックを作成することもできましたが、確認する必要があると考えました。

編集:インターロックは可能でしょうか。

4

1 に答える 1

0

どのような変数で、この変数で何をしたいですか?

Interlocked を使用すると、アトミックな方法で変数にアクセスできます。

つまり、プリミティブ型 (int、float、object ref) の場合、いくつかのプリミティブ アクション (インクリメント、値のスワップなど) をアトミックに、つまりスレッド セーフな方法で実行できます。たとえば、カウンターを複数のスレッドからインクリメント/デクリメントしたい場合、これは良い解決策になる可能性があります。

その他の (より強力な) 用途には、条件付きアトミック スワップが含まれます。これは、ソフトウェア トランザクション メモリのイディオムの一部であり、他の同期メカニズム (ミューテックスなど) を使用せずに複数のスレッドから変数を安全に変更できます。

ただし、インターロック操作はハードウェア レベルで何らかのロックを実行する必要があるため、パフォーマンスに一定のペナルティがあり、マルチスレッド データ アクセスや競合状態に対する魔法の杖ではありません。

また、実際にはプリミティブ型と操作でのみ機能します。いくつかの型で同時にいくつかの操作をインターリーブするには、より多くの配線が必要であり、interlocked クラスでは直接サポートされていません。

于 2015-06-09T12:41:32.853 に答える