Sobes.tech
Junior — Middle

Izskaidrojiet, kas ir nosacījuma mainīgais un kā tas tiek izmantots pavedienu sinhronizācijai.

sobes.tech AI

Atbilde no AI

Nosacījuma mainīgais (condition variable) ir mehānisms, kas ļauj vienam vai vairākiem pavedieniem gaidīt, kamēr tiek izpildīts noteikts nosacījums, kamēr cits pavediens tos informē par stāvokļa izmaiņām.

Go valodā nosacījuma mainīgie tiek īstenoti ar sync.Cond tipu. Tas darbojas kopā ar mutex (sync.Mutex), kas aizsargā kopīgos datus. Gaidāmais pavediens izsauc Wait(), kas atbrīvo mutex un bloķējas, līdz cits pavediens izsauc Signal() (lai pamodinātu vienu pavedienu) vai Broadcast() (lai pamodinātu visus gaidīgos).

Piemērs lietošanai:

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

// Gaidīšanas pavediens
mu.Lock()
for !sharedDataReady {
    cond.Wait() // atbrīvo mu un gaida signālu
}
// Šeit sharedDataReady == true
mu.Unlock()

// Stāvokļa maiņas pavediens
mu.Lock()
sharedDataReady = true
cond.Signal() // vai cond.Broadcast(), lai pamodinātu gaidīgos
mu.Unlock()

Tādējādi, nosacījuma mainīgais palīdz organizēt pareizu gaidīšanu un paziņojumu starp pavedieniem, izvairoties no aktīvas pārbaudes un sacensības apstākļiem.