为什么这段代码没有死锁?

Mar*_*rco 12 .net c# 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

Kon*_*lph 37

同一个线程中获取相同的锁两次.这是有效的,因为.NET支持所谓的递归锁(也就是可重入的互斥锁).