2

私は C#/ASP.NET Web アプリケーションに取り組んでおり、ロックを行う必要がある状況がいくつかあります。理想的には、ロックは互いに関係がないため、ロックが独立して動作することを望みます。[MethodImpl(MethodImplOptions.Synchronized)]を使用するいくつかの方法を検討してきましたlock()が、いくつかの質問/懸念があります。

MethodImplOptions.Synchronized will essentially dolock(this)` のようです。その場合、同期メソッドに入るスレッドは、他のすべてのスレッドが同期メソッドに入るのをブロックするようです。そうですか?もしそうなら、これは十分な粒度ではありません。その時点で、Application.Lock を使用することもできそうです。(でも、間違っていたら訂正してください。)

に関してlock()、私は何を渡す必要があるかを理解しようとしています。この目的のためだけに一連のオブジェクトを作成し、それぞれを異なるロックに使用する必要がありますか? より良い方法はありますか?

前もって感謝します!

4

4 に答える 4

3

私の好みは、ロック専用のオブジェクトを作成することです。

private object lockForSomeResource = new object();

競合リソースを管理しているクラスで。Jeff Richter が、私が以前に読んだ記事で、これを推奨する記事を投稿しました。

ロック内に別のロックを必要とするコードがある場合は、これらを階層として設計することについて慎重に検討する必要があります。常に同じ順序でリクエストするようにしてください。

于 2008-09-24T05:58:21.067 に答える
1

このフォーラムに同様の質問を投稿しましたが、参考になるかもしれません。以下はリンクです

.NET の Web サービスの単一ファイルへの書き込みの問題

于 2008-09-24T07:10:49.333 に答える
0

いくつかの静的参照またはシングルトンを公開し、それを lock() できます。

そのようなロックが必要な理由と、それを何に使用するかを説明していただけないでしょうか?

于 2008-09-24T05:53:27.537 に答える
0

静的/アプリケーション レベルで個別のオブジェクト インスタンスを作成することは、単純な排他的ロックの最良の方法です。

また、アプリケーション レベルでのリーダー/ライター ロック インスタンスが、リストやハッシュなどの読み取りと更新など、アプリケーションの同時実行性を向上させるのに役立つかどうかも検討する必要があります。

于 2008-09-24T05:56:18.077 に答える