一个同步方法可以访问C#中的另一个同步方法吗?

时间:2018-10-14 21:14:16

标签: c# synchronization deadlock

假设我有以下两种方法:

Object sync = new Object();
…
public void method1() { lock(sync) { … } }
public void method2() { lock(sync) { method1() … }}

我在这里的问题是,这会导致死锁吗?似乎method2在已持有锁同步时正在尝试获取锁同步。

2 个答案:

答案 0 :(得分:2)

不,它不会导致任何死锁。 lock语句将转换为System.Threading.Monitor EnterExit调用。 Documentation says:

  

同一线程多次调用Enter而不阻塞它是合法的;但是,必须等待相等数量的Exit调用,然后其他等待该对象的线程才能解除阻塞。

您两次从同一线程调用lock,因此不会发生死锁。

答案 1 :(得分:1)

这不会导致死锁,因为从method2到method1的调用将在同一线程上。锁定仅同步跨线程的调用,而不是在同一线程上。 有关更多信息,请参见MS docs

相关问题