多个锁定锁定相同的功能C#.Net

时间:2012-03-20 04:06:49

标签: c# .net locking

我有一个关于锁的简单问题。 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()  
{  
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

然而,你的问题相当含糊,所以你必须详细说明相同的 ...