Por que o bloqueio do mesmo objeto não causa um impasse? [duplicado]
Duplicata Possível:
Reentrante bloqueia em c #
Se eu escrever algum código como este:
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();
}
Eu recebo como saída:
Foo
Bar
Eu esperava que isso fosse um impasse, porque Foo adquire um bloqueio, e então espera por Bar para adquirir a fechadura. Mas isso não acontece.
O mecanismo de travamento simplesmente permite isso porque o código é executado no mesmo thread?