锁定关键字和应用程序重置

时间:2011-07-08 20:28:50

标签: c# .net multithreading

我有一个可以冻结锁定命令死锁的Web服务。

lock(typeof(MyServiceType))

我觉得这是由应用程序池重置引起的。

应用程序池重置是否有可能导致锁定永久锁定?

2 个答案:

答案 0 :(得分:6)

我无法准确评论有关应用程序池重置的情况,但是您应该尝试锁定新对象,而不是?

  private readonly object myLock = new object();

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

答案 1 :(得分:1)

不正常。

应用程序池是进程隔离的。您可以解决问题的唯一方法是应用程序池因死锁而无法关闭。 (这可能是DOS,因此可能是IIS中的一个错误。)

现在想一想,真的,这可能是你的问题。您正在锁定类型( typeof MyServiceType)。您是否可以尝试锁定其他内容(这可能无法阻止从IIS中的AppDomain中卸载包含的程序集?)。像下面这样的东西是惯用的:

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

      // ....

      lock(_lockObject)
      {
           ....
      }