我有一个问题,如果条件为真,我需要调用一个线程安全的方法(即在内部使用锁定的方法)。我正在检查的条件是读取多个线程(_count)之间共享的变量,所以当我读取它时我需要锁定以避免模糊读取。这不会导致嵌套的监视器锁定(死锁),因为我正在锁定已经线程安全的方法调用吗?
以下示例:
lock (this)
{
if (_count <= 10)
{
_someObj.DoSomethingThreadSafe(); //this method has its only locking internally
}
}
我该如何解决这个问题?
答案 0 :(得分:1)
不,可以在.NET中递归获取监视器。 (Arguably this was a design mistake,但这是另一回事。同样我通常不建议锁定this
。我建议使用私有引用,只有执行锁定的类知道,例如{{1}除非你真的需要将锁暴露给其他代码。)