可能重复:
C# 中的重入锁
如果我写一些这样的代码:
class Program {
static void Main(string[] args) {
Foo();
Console.ReadLine();
}
static void Foo() {
lock(_lock) {
Console.WriteLine("Foo");
Bar();
}
}
static void Bar() {
lock(_lock) {
Console.WriteLine("Bar");
}
}
private static readonly object _lock = new object();
}
我得到输出:
Foo
Bar
我预计这会死锁,因为 Foo 获得了锁,然后等待 Bar 获得锁。但这不会发生。
锁定机制是否只是因为代码在同一个线程上执行而允许这样做?