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....
}
}
锁在对象上。您的代码相当于以下代码:
private static readonly object doSomethingLock = new object();
public static void DoSomething (SomeObject o)
{
var sameObject = doSomethingLock;
lock(sameObject)
{
o.Update();
// etc....
}
}
该锁是针对该静态方法中该对象的使用,而不是针对该对象的全局。
如果另一个线程试图调用该方法,它将被阻塞,直到第一个线程完成它的调用。
它不会阻止代码中其他方法访问该对象,但只要对该对象的唯一访问是在锁内,那么它就相当于锁定了该对象。