none
C#中如何判断一个对象当前是否被lock RRS feed

  • 问题

  • 假设存在一个对象o,当我试图去lock(o)的时候,如果当前o已经被其他线程lock,我希望立刻返回并告知欲lock的对象已经被其他线程lock,而不是等待。

    2010年1月28日 3:49

答案

  • 如果已被其它线程锁定那么你加锁是不会成功的
    你可以通过Monitor.TryEnter 方法

    if(Monitor.TryEnter(o))//如果获得了锁
    {
    //do something

    Monitor.Exit(o);
    }
    else
    {
    //已被其它线程锁定
    }

    if(Monitor.TryEnter(o,1000))//等待一秒钟,如果获得了锁
    {
    //do something

    Monitor.Exit(o);
    }
    else
    {
    //已被其它线程锁定
    }


    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月28日 5:32
    版主

全部回复

  • 如果已被其它线程锁定那么你加锁是不会成功的
    你可以通过Monitor.TryEnter 方法

    if(Monitor.TryEnter(o))//如果获得了锁
    {
    //do something

    Monitor.Exit(o);
    }
    else
    {
    //已被其它线程锁定
    }

    if(Monitor.TryEnter(o,1000))//等待一秒钟,如果获得了锁
    {
    //do something

    Monitor.Exit(o);
    }
    else
    {
    //已被其它线程锁定
    }


    Memory all alone in the moonlight~My Blog in .NET~~~
    2010年1月28日 5:32
    版主
  • 你好!
         实际上lock是对Monitor类的包装,你使用lock是无法实现这个需求的!
         你可以参考Tang版主的方法!
    周雪峰
    2010年1月28日 7:42
    版主