1

我的问题是,如果我在两个单独的方法中有两条关键路径,那么第二种方法中的锁是否尊重第一种方法中的锁?

作为下面的虚拟代码中的示例,如果method1线程 Amethod2调用并由线程 B 调用,线程 B 是否在进入关键路径之前等待线程 A 释放锁method2

private static readonly object mylock = new object();

public void method1()
{
    lock(mylock)
    {
         // critical path 1
    }
}

public void method2()
{
    lock(mylock)
    {
        // critical path 2
    }
}
4

1 回答 1

2

简而言之,是的。lock关键字接受一个对象实例作为标识锁的标记。这并不意味着实例本身免受多线程访问的危险。相反,它仅用于唯一标识在此受保护状态下执行的一段或多段代码。lock使用同一对象实例保护的两个或多个代码段将保证以没有两个执行流临时共置的方式执行。换句话说,您的示例中的关键路径 1 和 2 保证不会同时发生,因为您使用相同的对象实例来定义代码区域。

于 2013-07-24T19:34:54.530 回答