Sobes.tech
Senior

Deadlock чист?

sobes.tech AI

Ҷавоб аз AI

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

Пример: Нишка А е взела ресурс 1 и чака ресурс 2, а нишка Б е взела ресурс 2 и чака ресурс 1. Никой от тях не може да продължи — възниква взаимна блокировка.

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

Пример за deadlock в Go:

func main() {
    ch := make(chan int)
    ch <- 1 // Опит за изпращане към канал без получател — програмата ще блокира
}

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

За да се предотвратят deadlock-ите, е важно правилно да се проектира взаимодействието между нишките и да се използват механизми за синхронизация с внимание.