c# - 一个同步方法可以访问 C# 中的另一个同步方法吗?
问题描述
假设我有以下两种方法:
Object sync = new Object();
…
public void method1() { lock(sync) { … } }
public void method2() { lock(sync) { method1() … }}
我的问题是这会导致任何僵局吗?看起来 method2 在它已经持有它时正在尝试获取锁同步。
解决方案
不,它不会导致任何死锁。lock
语句转换为 System.Threading.Monitor
Enter
和Exit
调用。文档说:
同一个线程在没有阻塞的情况下多次调用 Enter 是合法的;但是,在等待对象的其他线程解除阻塞之前,必须调用相同数量的 Exit 调用。
您从同一个线程调用lock
两次,因此不会发生死锁。
推荐阅读
- visual-studio-code - 更改 VS Code 中某些标签之间的格式/语言
- python - 如何压缩发送给客户端的数据流?
- conan - 为 CMake 项目创建一个配方,使用 find_package 查找其依赖项
- centos - pm2 在随机时间后杀死我的 nuxt 进程
- kotlin - 计算特定字符在字符串中出现的次数 - Kotlin
- macos - Quantum Espresso v6.8 无法在 MacBook 上编译 (Monterey 12.0.1 (21A559))
- javascript - 如何防止我的菜单移动页面中的其他元素?
- azure - 带有服务总线证书的 Azure 身份验证服务主体
- mongodb - 如何设置字符串字段不等于空字符串MongoDB聚合管道
- c++ - 值传递和 std::move 与转发引用