相关疑难解决方法(0)

检查当前线程是否拥有锁

假设我有以下代码:

public class SomeClass()
{
    private readonly object _lock = new object();

    public void SomeMethodA()
    {
        lock (_lock)
        {
            SomeHelperMethod();

            //do something that requires lock on _lock
        }
    }

    public void SomeMethodB()
    {
        lock (_lock)
        {
            SomeHelperMethod();

            //do something that requires lock on _lock
        }
    }

    private void SomeHelperMethod()
    {
        lock (_lock)
        {
            //do something that requires lock on _lock
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

锁定内部SomeHelperMethod似乎是多余和浪费的,因为所有呼叫者都已经锁定.但是,简单地删除锁SomeHelperMethod似乎很危险,因为我们以后可能会重构代码并忘记_lock在调用之前锁定对象SomeHelperMethod.

理想情况下,我可以通过断言当前线程在_lock内部拥有一个锁来解决这个问题SomeHelperMethod:

private void SomeHelperMethod() …
Run Code Online (Sandbox Code Playgroud)

.net multithreading locking

17
推荐指数
2
解决办法
4990
查看次数

标签 统计

.net ×1

locking ×1

multithreading ×1