首页 > 解决方案 > 一个同步方法可以访问 C# 中的另一个同步方法吗?

问题描述

假设我有以下两种方法:

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

我的问题是这会导致任何僵局吗?看起来 method2 在它已经持有它时正在尝试获取锁同步。

标签: c#synchronizationdeadlock

解决方案


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

同一个线程在没有阻塞的情况下多次调用 Enter 是合法的;但是,在等待对象的其他线程解除阻塞之前,必须调用相同数量的 Exit 调用。

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


推荐阅读