Sobes.tech
Junior — Middle

Можете ли објаснити принцип рада mutex-а и његову употребу у мулти-тред програмима?

sobes.tech АИ

Одговор од АИ

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.