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?

questionAnswers(4)

yourAnswerToTheQuestion