Почему блокировка на том же объекте не вызывает тупик? [Дубликат]

Возможный дубликат:
Повторно входящие блокировки в 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

Я ожидал, что это зашло в тупик, потому что Фу получает блокировку, а затем ждет, пока Бар получит блокировку. Но этого не происходит.

Механизм блокировки просто позволяет это, потому что код выполняется в том же потоке?

Ответы на вопрос(4)

Ваш ответ на вопрос