在 C# 中,我们对静态字段使用静态锁,对非静态字段使用非静态锁。为什么它比对非静态字段使用静态锁更好?像这样:
public class A{
long variable = 0;
static object sync = new object();
void Increment(){
lock (sync){variable++;}
}
}
请您参考如下方法:
不对非静态字段使用static 锁的主要原因很简单,这样您就不会得到不必要的 冲突。如果该字段位于不同的对象上,那么它们通常可以安全地分别进行突变 - 因此不需要两个线程必须相互阻塞(如果您使用 static 锁,就会发生这种情况,并且两个线程正在接触不同的对象)。
就我个人而言,我很想只使用 Interlocked.Increment(ref variable); :)
