根据状态实现锁定

时间:2017-08-23 22:14:34

标签: multithreading c#-4.0 thread-safety locking

如果我有这样的方法:

public class Main()
{
  public void Start()
  {
     if(//Check if another thread already invoked this method and its in processing//)
       DoSomething();
  }

  void DoSomething()
  {
    //Some code in here
  }
}

如何使用lock检查线程是否已经在执行DoSomething()然后跳过它?

我知道lock会让其他调用等待,但我想跳过而不是等待并执行。

1 个答案:

答案 0 :(得分:0)

您可以使用

的tryLock

布尔tryLock() 只有在调用时它是空闲的才能获取锁。 获取锁定(如果可用)并立即返回值true。如果锁定不可用,则此方法将立即返回值false。

此方法的典型用法习惯是:

  Lock lock = ...;
  if (lock.tryLock()) {
      try {
          // manipulate protected state
      } finally {
          lock.unlock();
      }
  } else {
      // perform alternative actions
  }

此用法可确保锁定在获取时解锁,并且如果未获取锁定则不会尝试解锁。 返回: 如果获得了锁定,则为true,否则为