多个锁锁定相同的函数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()  
{  
}

多个锁锁定相同的函数C#.Net

不,它们不一样。如果您锁定的对象与现有锁定的对象不同,那么两个代码路径都将被允许。因此,在Process2 curtype == 'b'的情况下,锁使用_LockerB对象。如果尝试使用_LockerA对象的其他锁之一,则将允许它们进入LongProcess

Process1Process2有可能锁定同一个对象,但它们肯定是而不是相同的。然而,在同一调用堆栈中允许对同一对象进行锁定(我认为,如果必须这样做的话,很少这样做)(在Process1调用Process2的情况下,也称为递归锁定)。这可以更好地描述为依赖锁定。

然而,你的问题相当模糊,所以你必须详细说明你所说的是什么意思,也就是。。。