2011-07-08 11 views
3

ロックコマンドのデッドロックをフリーズするWebサービスがあります。キーワードとアプリケーションのリセットをリセットします。

lock(typeof(MyServiceType)) 

私はこれがアプリケーションプールのリセットによって発生したと考えています。

アプリケーションプールをリセットすると、ロックが永久ロックになる可能性がありますか?

+1

'Type'のインスタンスをロックしないでください!一般に、他の誰かが 'ロック 'できるものに決してロックしてはいけません。 – jason

答えて

6

アプリケーションプールのリセットに関して何が起こっているのか正確にはコメントできませんが、代わりに新しいオブジェクトをロックする必要がありますか?

private readonly object myLock = new object(); 

    void DoSomething() 
    { 
    lock(myLock) 
    { 
     ... 
    } 
    } 
+0

修正されました。 Henkに感謝します。 – Armbrat

1

通常ではありません。

アプリケーションプールはプロセス分離されています。あなたが問題を起こす唯一の方法は、デッドロックのためにアプリケーションプールがシャットダウンできない場合です。 (これはDOSなので、おそらくIISのバグでしょう。)

これを考えると、これはあなたの問題です。タイプ(タイプ MyServiceType)でロックしています。何か他のものをロックしようとすることができますか(おそらくIISのAppDomainから含むアセンブリをアンロードできないでしょうか?)以下のようなものは慣用的です:

public class MyServiceType : //.... 
{ 
     private static readonly Object _lockObject = new Object(); 

     // .... 

     lock(_lockObject) 
     { 
      .... 
     } 
関連する問題