Sobes.tech
Senior

Deadlock nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Deadlock (qarşılıqlı bloklama) — çox ipli və ya çox prosesli mühitdə, iki və ya daha çox prosesin (və ya ipin) bir-birini sonsuz müddətə bloklaması, bir-birinin istifadə etdiyi resursların azad olunmasını gözləməsi vəziyyətidir.

Misal: A ipi 1 resursunu ələ keçirib və 2 resursunu gözləyir, B ipi isə 2 resursunu ələ keçirib və 1 resursunu gözləyir. Heç biri işinə davam edə bilməz — qarşılıqlı bloklama baş verir.

Go dilində deadlock baş verə bilər, məsələn, bir goroutine kanal vasitəsilə məlumat göndərməyə və ya almağa çalışarkən, digər goroutine məlumatı qəbul etməyə və ya göndərməyə hazır deyilsə və bütün goroutinlər bloklanıbsa.

Go-da deadlock nümunəsi:

func main() {
    ch := make(chan int)
    ch <- 1 // Qəbul edən olmadan kanala məlumat göndərməyə cəhd — proqram bloklanacaq
}

Burada, proqram donacaq, çünki kanaldan oxuyan goroutine yoxdur və göndərmə sonsuz bloklanır.

Deadlock-ları qarşısını almaq üçün, iplar arasındakı qarşılıqlı əlaqəni düzgün planlaşdırmaq və sinxronizasiya mexanizmlərindən ehtiyatla istifadə etmək vacibdir.