SyncRootの上のSyncLock
-
12-09-2019 - |
質問
私は同期キューを作成していると私はエンキュー/デキュー・メソッドを呼び出したときに、そのキューのSyncRootのプロパティにSyncLockを使用しています。方法は、標準的なプロデューサ/コンシューマ・クラスのインスタンスから呼び出されます。
SyncRootのプロパティを適切に使用することですか?
これは各クラスにプライベート共有オブジェクトを作成して、代わりにその上にロックするためのより良い練習でしょうか?
あなたの推論を説明してくださいます。
解決
はい、それはSyncRoot
プロパティが何のためにあるのかを正確です。特に、それは別の「ラッパー」コレクションが作成されている場合、それはおそらく同じSyncRoot
を使用しますので、誰もが正常に同期させることができることを意味します。
は、はは、独自のロックオブジェクトを作成することができ、そしてそれは他の誰が同時にロックされていないことが確実になるだろう - それはまた、他のコードのができなかったことを意味しますの安全に同じコレクションで動作します。それは本当に、シナリオによって異なります - 他のコードは、同じコレクションを使用することができますか?あなたのコントロール下で、他のコードはありますか?
は、のすべてのの操作だけでなく、エンキュー/デキューのためにロックを取る必要があることに注意してください。あなたは、コレクションを反復処理したい場合は特に、あなたが途中で変更がイテレータを無効にするように、その全体の時間のためにロックを保持する必要があります。
所属していません StackOverflow