Skip to main content
 首页 » 编程设计

c#之为什么我们使用非静态属性来锁定非静态字段

2024年02月27日31birdshome

在 C# 中,我们对静态字段使用静态锁,对非静态字段使用非静态锁。为什么它比对非静态字段使用静态锁更好?像这样:

public class A{ 
   long variable = 0; 
   static object sync = new object(); 
   void Increment(){ 
       lock (sync){variable++;} 
   } 
} 

请您参考如下方法:

不对非静态字段使用static 锁的主要原因很简单,这样您就不会得到不必要的 冲突。如果该字段位于不同的对象上,那么它们通常可以安全地分别进行突变 - 因此不需要两个线程必须相互阻塞(如果您使用 static 锁,就会发生这种情况,并且两个线程正在接触不同的对象)。

就我个人而言,我很想只使用 Interlocked.Increment(ref variable); :)