Sobes.tech
Senior

Kas ir deadlock?

sobes.tech AI

Atbilde no AI

Deadlock (savstarpēja bloķēšana) ir situācija daudzšūnu vai daudzprocesu vidē, kad divi vai vairāk procesi (vai pavedieni) mūžīgi bloķē viens otru, gaidot, kad tiks atbrīvoti resursi, kurus tie aizņem.

Piemērs: Šūns A ir ieguvis resursu 1 un gaida resursu 2, kamēr šūns B ir ieguvis resursu 2 un gaida resursu 1. Neviens no tiem nevar turpināt darbu — notiek savstarpēja bloķēšana.

Go valodā deadlock var rasties, piemēram, ja gorutīna mēģina nosūtīt vai saņemt datus caur kanālu, bet cita gorutīna nav gatava saņemt vai nosūtīt datus, un visas gorutīnas ir bloķētas.

Piemērs deadlock Go:

func main() {
    ch := make(chan int)
    ch <- 1 // Mēģinājums nosūtīt caur kanālu bez saņēmēja — programma bloķēsies
}

Šeit programma apstāsies, jo nav gorutinas, kas lasītu no kanāla, un sūtīšana tiks bloķēta uz mūžu.

Lai novērstu deadlock, ir svarīgi pareizi plānot savstarpējo mijiedarbību starp pavedieniem un uzmanīgi izmantot sinhronizācijas mehānismus.