锁定条件

时间:2011-03-21 13:48:49

标签: c# locking if-statement nested deadlock

我有一个问题,如果条件为真,我需要调用一个线程安全的方法(即在内部使用锁定的方法)。我正在检查的条件是读取多个线程(_count)之间共享的变量,所以当我读取它时我需要锁定以避免模糊读取。这不会导致嵌套的监视器锁定(死锁),因为我正在锁定已经线程安全的方法调用吗?

以下示例:

lock (this)
{
    if (_count <= 10)
    {
        _someObj.DoSomethingThreadSafe(); //this method has its only locking internally
    }
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

不,可以在.NET中递归获取监视器。 (Arguably this was a design mistake,但这是另一回事。同样我通常不建议锁定this。我建议使用私有引用,只有执行锁定的类知道,例如{{1}除非你真的需要将锁暴露给其他代码。)