Sobes.tech
Назад к вопросам
Senior
3

Что такое дедлок?

Компании, где спрашивали
I-teco

Ответ от нейросети

sobes.tech AI

Дедлок (взаимная блокировка) — ситуация в многопоточной или многопроцессной среде, когда два или более процесса (или потока) навсегда блокируют друг друга, ожидая освобождения ресурсов, занятых друг другом.

Пример: Поток A захватил ресурс 1 и ждёт ресурс 2, а поток B захватил ресурс 2 и ждёт ресурс 1. Ни один из них не может продолжить работу — возникает взаимная блокировка.

В Go дедлок может возникнуть, например, если горутина пытается отправить или получить данные из канала, но другая горутина не готова принять или отправить данные, и при этом все горутины заблокированы.

Пример дедлока в Go:

func main() {
    ch := make(chan int)
    ch <- 1 // Пытаемся отправить в канал без получателя — программа заблокируется
}

Здесь программа зависнет, потому что нет горутины, которая бы читала из канала, и отправка блокируется навсегда.

Для предотвращения дедлоков важно правильно проектировать взаимодействие между потоками и использовать механизмы синхронизации аккуратно.