C#\ Lock \ lock实例成员VS锁定静态成员

时间:2011-07-04 05:21:14

标签: c# multithreading locking

什么更好?这两个选项之间的运行时间有什么不同吗?

3 个答案:

答案 0 :(得分:2)

锁定静态和锁定实例成员之间没有运行时区别。但是,如果您使用实例锁并且正在更新静态,它可能会破坏您的代码。

class Broken {
  static int myCounter;
  object synch = new object();

  void SomeMethod()
  {
      lock (synch) { // BAD
        ++myCounter; 
      }
  }
}

答案 1 :(得分:0)

咦?我认为这应该取决于你锁定的内容。如果您尝试锁定非静态对象,则应该锁定非静态对象。顺便说一句,你可能想要调查你想要做什么,大多数时候,已经有线程安全的对象内置语言。

答案 2 :(得分:0)

为什么要锁定非静态方法?您通常只需要访问共享资源的同步,即将在所有线程之间共享的资源。你不会用实例方法做这个,你需要一个单例。