c# - 为什么这段代码不会死锁?

标签 c# .net multithreading

Log 方法不应该阻塞吗?

namespace Sandbox {
class Program {
    static void Main(string[] args) {
        var log = new Logger();
        lock (log) {
            log.Log("Hello World!");
        }
    }
}

public class Logger {
    public void Log(string message) {
        lock (this) {
            Console.WriteLine(message);
        }
    }
}

最佳答案

同一个线程两次获取同一个锁。这是可行的,因为 .NET 支持所谓的递归锁(又名 reentrant mutexes )。

关于c# - 为什么这段代码不会死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5045900/

相关文章:

c# - 在 C# 中模拟 StreamReader 以进行单元测试

java - 读取、表示和渲染 map 数据的最佳方式是什么?

ios - 崩溃 : "Thread 1: EXC_BAD_ACCESS"?

java - 以与桌面应用程序相同的方式使用 Java 线程是否安全?

c# - 从 ASP.NET 标识中删除 `AspNetUserLogins` 表

c# - c#删除文件夹和子文件夹

c# - 合并两个数据库表的 LINQ 代码?

c# - VS UnitTest - 线程被中止

.net - 终止 .NET 4 TPL 中的死锁任务

C#:使用单独的线程填充 UI