Sobes.tech
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.