2011-07-04 64 views

回答

2

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

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

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

所以你说最好的做法是在课堂上锁定静态对象? – Eyal

+0

我一直使用静态锁定目的。 –

+0

好的非常感谢 - 这就是我要做的! – Eyal

0

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

0

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