Встречается на собеседованиях • сегодня
Что такое DeadLock
DeadLock (взаимная блокировка) возникает, когда два или более потока бесконечно ожидают ресурсы, захваченные друг другом.
Пример:
csharp
object lock1 = new object();
object lock2 = new object();
Thread t1 = new Thread(() => {
lock (lock1) {
Thread.Sleep(100);
lock (lock2) { } // Ждёт, пока t2 освободит lock2
}
});
Thread t2 = new Thread(() => {
lock (lock2) {
Thread.Sleep(100);
lock (lock1) { } // Ждёт, пока t1 освободит lock1
}
});
t1.Start();
t2.Start();
text
**Как избежать:**
- Упорядочивание блокировок (всегда захватывать `lock1` перед `lock2`).
- Использование `Monitor.TryEnter` с таймаутом.
- Минимизация времени удержания блокировок.
- Использование `async/await` вместо блокирующих вызовов.
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы