多个锁锁定相同的函数C#.Net
本文关键字:函数 Net 锁定 | 更新日期: 2023-09-27 18:28:32
我有一个关于锁的简单问题。Process1和Process2是否相同,因为它们最终锁定了LongProcess?非常感谢。
private static readonly object _Locker = new object();
public void Process1()
{
lock(_LockerA){
LongProcess()
}
}
public void Process2()
{
if(curType == A)
ProcessTypeA();
else if(curtype == B)
ProcessTypeB();
}
private static readonly object _LockerA = new object();
public void ProcessTypeA()
{
lock(_LockerA){
LongProcess()
}
}
private static readonly object _LockerB = new object();
public void ProcessTypeB()
{
lock(_LockerB){
LongProcess()
}
}
public void LongProcess()
{
}
不,它们不一样。如果您锁定的对象与现有锁定的对象不同,那么两个代码路径都将被允许。因此,在Process2
curtype == 'b'
的情况下,锁使用_LockerB
对象。如果尝试使用_LockerA
对象的其他锁之一,则将允许它们进入LongProcess
。
Process1
和Process2
有可能锁定同一个对象,但它们肯定是而不是相同的。然而,在同一调用堆栈中允许对同一对象进行锁定(我认为,如果必须这样做的话,很少这样做)(在Process1
调用Process2
的情况下,也称为递归锁定)。这可以更好地描述为依赖的锁定。
然而,你的问题相当模糊,所以你必须详细说明你所说的是什么意思,也就是。。。