¿Por qué el bloqueo en el mismo objeto no provoca un punto muerto? [duplicar]

Posible duplicado:
Bloqueos de reingreso en C #

Si escribo un 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();
}

Me sale como salida:

Foo
Bar

Esperaba que esto se bloqueara, porque Foo adquiere un bloqueo, y luego espera que Bar obtenga el bloqueo. Pero esto no sucede.

¿El mecanismo de bloqueo simplemente permite esto porque el código se ejecuta en el mismo hilo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta