Почему блокировка на том же объекте не вызывает тупик? [Дубликат]
Возможный дубликат:
Повторно входящие блокировки в 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
Я ожидал, что это зашло в тупик, потому что Фу получает блокировку, а затем ждет, пока Бар получит блокировку. Но этого не происходит.
Механизм блокировки просто позволяет это, потому что код выполняется в том же потоке?