Jon*_*Jon 9 .net c# multithreading c#-4.0
如果我有这样的事情:
private readonly object objectLock = new object();
public void MethodA()
{
lock(objectLock)
{
//do something
}
}
public void MethodB()
{
lock(objectLock)
{
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
如果我有2个线程并且两个都同时进入,则第一个线程调用MethodA和第二个方法B.无论哪个首先到达并锁定objectLock,我假设另一个线程在那里等待,直到objectLock不再被锁定.
是的,你的解释是正确的 - 除非已经采取了锁定(在这种情况下,两个线程都在等待,并且任意一个线程在锁定后立即获得锁定).
(稍微偏离主题)如果他们做的事情非常重要,我建议不要锁定整个方法.尽量保持代码的"锁定"部分尽可能小和尽可能快.
那是正确的.
但是,不是被锁定的objectLock(也不是对象),它是被锁定的代码块.
将传递给lock关键字的对象视为解锁多个门的密钥,但一次只能授予对单个房间的访问权限.