Sobes.tech
Junior — Middle

Objasnite šta je uslovna promenljiva i kako se koristi za sinhronizaciju niti.

sobes.tech АИ

Одговор од АИ

Promenljiva uslova (condition variable) je mehanizam za sinhronizaciju niti koji omogućava jednoj ili više niti da čekaju na pojavu određenog uslova, dok ih druga nit obaveštava o promeni stanja.

U Go, promenljive uslova se implementiraju putem tipa sync.Cond. Ona radi zajedno sa mutex-om (sync.Mutex), koji štiti deljene podatke. Nit koja želi da čeka poziva Wait(), čime oslobađa mutex i blokira se dok druga nit ne pozove Signal() (za buđenje jedne niti) ili Broadcast() (za buđenje svih koje čekaju).

Primer upotrebe:

var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false

// Nit koja čeka
mu.Lock()
for !sharedDataReady {
    cond.Wait() // oslobađa mu i čeka signal
}
// Ovde sharedDataReady == true
mu.Unlock()

// Nit koja menja stanje
mu.Lock()
sharedDataReady = true
cond.Signal() // ili cond.Broadcast(), za buđenje čekajućih
mu.Unlock()

Na ovaj način, promenljiva uslova pomaže u organizaciji pravilnog čekanja i obaveštavanja između niti, izbegavajući aktivno ispitivanje i trke uslova.