c#锁定对象还是引用?你怎么回答这个问题?

本文关键字:回答这个 问题 引用 锁定 对象 | 更新日期: 2023-09-27 18:17:03

假设我们想要实现线程同步,我们为此使用锁。但是如果有人问,锁是在对象上还是在引用上,我们怎么回答这个问题?

private static readonly object doSomethingLock = new object();
public static void DoSomething (SomeObject o) 
{
   lock(doSomethingLock) 
   {
       o.Update();
       // etc....
   }
}

c#锁定对象还是引用?你怎么回答这个问题?

锁在对象上。您的代码相当于以下代码:

private static readonly object doSomethingLock = new object();
public static void DoSomething (SomeObject o) 
{
   var sameObject = doSomethingLock;
   lock(sameObject) 
   {
       o.Update();
       // etc....
   }
}

该锁是针对该静态方法中该对象的使用,而不是针对该对象的全局。

如果另一个线程试图调用该方法,它将被阻塞,直到第一个线程完成它的调用。

它不会阻止代码中其他方法访问该对象,但只要对该对象的唯一访问是在锁内,那么它就相当于锁定了该对象。

相关文章: