Что такое deadlock?

Junior
1.9k просмотров
AFK Offer AI

Deadlock — взаимная блокировка, когда две или более горутины ждут друг друга и ни одна не может продолжить.

Классический пример: горутина A держит мьютекс 1 и ждёт мьютекс 2, горутина B держит мьютекс 2 и ждёт мьютекс 1. Go runtime умеет детектить простой deadlock — если все горутины заблокированы, программа крашится с fatal error: all goroutines are asleep - deadlock!.

Предотвращение: всегда захватывай мьютексы в одном порядке, используй select с default или таймаутами, используй context с дедлайнами.

Следующий вопрос

RWMutex vs Mutex — в чём разница?