ロックコマンドのデッドロックをフリーズするWebサービスがあります。キーワードとアプリケーションのリセットをリセットします。
lock(typeof(MyServiceType))
私はこれがアプリケーションプールのリセットによって発生したと考えています。
アプリケーションプールをリセットすると、ロックが永久ロックになる可能性がありますか?
ロックコマンドのデッドロックをフリーズするWebサービスがあります。キーワードとアプリケーションのリセットをリセットします。
lock(typeof(MyServiceType))
私はこれがアプリケーションプールのリセットによって発生したと考えています。
アプリケーションプールをリセットすると、ロックが永久ロックになる可能性がありますか?
アプリケーションプールのリセットに関して何が起こっているのか正確にはコメントできませんが、代わりに新しいオブジェクトをロックする必要がありますか?
private readonly object myLock = new object();
void DoSomething()
{
lock(myLock)
{
...
}
}
修正されました。 Henkに感謝します。 – Armbrat
通常ではありません。
アプリケーションプールはプロセス分離されています。あなたが問題を起こす唯一の方法は、デッドロックのためにアプリケーションプールがシャットダウンできない場合です。 (これはDOSなので、おそらくIISのバグでしょう。)
これを考えると、これはあなたの問題です。タイプ(タイプ MyServiceType)でロックしています。何か他のものをロックしようとすることができますか(おそらくIISのAppDomainから含むアセンブリをアンロードできないでしょうか?)以下のようなものは慣用的です:
public class MyServiceType : //....
{
private static readonly Object _lockObject = new Object();
// ....
lock(_lockObject)
{
....
}
'Type'のインスタンスをロックしないでください!一般に、他の誰かが 'ロック 'できるものに決してロックしてはいけません。 – jason