Junior — Middle
Môžete vysvetliť princíp fungovania mutexu a jeho použitie v viacvláknových programoch?
sobes.tech AI
Odpoveď od AI
Mutual exclusion (Mutex) je mehanizam za sinhronizaciju koji se koristi za sprečavanje istovremenog pristupa više niti zajedničkom resursu (npr. promenljivoj ili fajlu). Mutex garantuje da u svakom trenutku samo jedna nit može da poseduje zaključavanje i izvršava kritičnu sekciju koda.
Princip rada:
- Nit pokušava da stekne mutex pre ulaska u kritičnu sekciju.
- Ako je mutex slobodan, nit dobija pristup i nastavlja.
- Ako je mutex zauzet od strane druge niti, trenutna nit se blokira i čeka da se oslobodi.
- Nakon završetka rada sa resursom, nit oslobađa mutex, omogućavajući drugim nitima da nastave.
U Go, ovo se implementira putem tipa sync.Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock() // zaključavanje mutexa
counter++ // kritična sekcija
mu.Unlock() // otključavanje mutexa
}
Korišćenje mutex-a sprečava uslove trke i obezbeđuje ispravnost podataka tokom paralelnog izvršavanja.