Monitor.Wait(object obj) を使用する場合、obj には何を使用する必要がありますか? この記事では、.NET でのマルチスレッドについて読んでいます。作成者は、監視ロックとしてのみ使用される新しい Object() をインスタンス化します。これは実際に行うべきことですか、それとも 2 つ以上のスレッド間で共有される実際の変数を監視するのがより一般的ですか?
2 に答える
4
はい、私は通常、その目的のために特別に作成された新しいオブジェクトをロックします。また、それがプライベートかつ静的であり、Type オブジェクトではないことも確認します。変数やオブジェクトを実際に「ロック」しているのではなく、ロックをトークンとして使用して、複数のスレッドでのコード ブロックの実行を防止していることを認識することも重要です。
ロックオンthis
(C# を使用している場合は現在のインスタンス) はあまり優先されません。これは、インスタンスにアクセスできるコードがインスタンスにロックを設定し、デッドロックの可能性を高める可能性があるためです。独自のロック オブジェクトを作成することで、自分自身を完全に制御できます。
これは、このいくつかの背後にある理由を説明するロックに関する有益な記事です。
于 2010-02-02T18:45:21.353 に答える
2
また、文字列オブジェクトをロックするのもよくありません。文字列オブジェクトは、 Type オブジェクトのようにアプリ ドメイン間で共有されることがあるためです。アプリ ドメインが複数ある場合、これを行うと不要な競合が発生する可能性があります。
于 2010-02-02T19:05:05.163 に答える