Sobes.tech
Junior — Middle

Paaiškinkite, kas yra sąlyginė kintamoji ir kaip ji naudojama srautų sinchronizavimui.

sobes.tech AI

Atsakymas iš AI

Sąlygos kintamasis (condition variable) yra sinchronizacijos mechanizmas, leidžiantis vienam ar keliems srautams laukti tam tikro sąlygos įvykdymo, tuo pačiu kai kitas srautas juos informuoja apie būsenos pasikeitimą.

Go kalboje sąlygos kintamieji įgyvendinami per sync.Cond tipą. Jie veikia kartu su mutex'u (sync.Mutex), kuris saugo bendrus duomenis. Laukiantis srautas kviečia Wait(), kuris atlaisvina mutex'ą ir blokuojasi, kol kitas srautas kviečia Signal() (vieno srauto pažadinimui) arba Broadcast() (visų laukiančių pažadinimui).

Naudojimo pavyzdys:

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

// Laukiantis srautas
mu.Lock()
for !sharedDataReady {
    cond.Wait() // atlaisvina mu ir laukia signalo
}
// Čia sharedDataReady == true
mu.Unlock()

// Keičiančio būseną srautas
mu.Lock()
sharedDataReady = true
cond.Signal() // arba cond.Broadcast(), kad pažadintų laukiančius
mu.Unlock()

Šiuo būdu, sąlygos kintamasis padeda organizuoti teisingą laukimą ir pranešimą tarp srautų, išvengiant aktyvaus tikrinimo ir lenktynių sąlygų.