我看到了获取锁时使用的对象的不同变体
静态私有(private)对象
public class MyClass { private static object syncBlock = new object(); private void MyMethod() { lock (syncBlock) { } }
}
类级私有(private)对象
public class MyClass { private object syncBlock = new object(); private void MyMethod() { lock (syncBlock) { } } }
使用类型本身
public class MyClass { private void MyMethod() { lock (typeof (MyClass)) { } } }
使用这个:
public class MyClass { private void MyMethod() { lock (this) { } } }
有人可以详细说明其中每一个的优点/缺点是什么,以及在给定场景中是否应该优先选择其中一个。
最佳答案
Don't use 锁定(此)
。
Don't use lock(typeof(MyClass))
两者之一。
至于static
与instance
,这取决于什么适合你。如果您使用静态私有(private)对象
,那么您的类的所有实例都将共享锁。如果您使用非静态的私有(private)对象
,则每个实例都将拥有自己的锁。所以没有什么优点/缺点,这取决于你的需要。
关于c# - 使用什么对象类型/实例进行同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24387878/