Что такое дедлок?
Ответ от нейросети
sobes.tech AI
Дедлок (взаимная блокировка) — ситуация в многопоточной или многопроцессной среде, когда два или более процесса (или потока) навсегда блокируют друг друга, ожидая освобождения ресурсов, занятых друг другом.
Пример: Поток A захватил ресурс 1 и ждёт ресурс 2, а поток B захватил ресурс 2 и ждёт ресурс 1. Ни один из них не может продолжить работу — возникает взаимная блокировка.
В Go дедлок может возникнуть, например, если горутина пытается отправить или получить данные из канала, но другая горутина не готова принять или отправить данные, и при этом все горутины заблокированы.
Пример дедлока в Go:
func main() {
ch := make(chan int)
ch <- 1 // Пытаемся отправить в канал без получателя — программа заблокируется
}
Здесь программа зависнет, потому что нет горутины, которая бы читала из канала, и отправка блокируется навсегда.
Для предотвращения дедлоков важно правильно проектировать взаимодействие между потоками и использовать механизмы синхронизации аккуратно.