Middle
Kā darbojas nosacījuma mainīgais (sync.Cond) Go?
sobes.tech AI
Atbilde no AI
Go valodā, sync.Cond ir nosacījuma mainīgais, kas tiek izmantots gorutīnu koordinēšanai, ļaujot vienai vai vairākām gorutīnām gaidīt noteikta nosacījuma iestāšanos.
Galvenās metodes:
Wait(): bloķē pašreizējo gorutīnu un atbrīvo saistīto mutex, līdz tiek izsauktsSignal()vaiBroadcast().Signal(): pamodina vienu gaidošo gorutīnu uz nosacījuma mainīgā.Broadcast(): pamodina visas gaidošās gorutīnas uz nosacījuma mainīgā.
Piemērs lietošanai:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Gorutīna, kas gaida nosacījumu
ngo func() {
mu.Lock()
cond.Wait() // gaida signālu
// nosacījums ir izpildīts
mu.Unlock()
}()
// Gorutīna, kas sūta signālu
mu.Lock()
// maina stāvokli, uz kuru gaidīja pirmā gorutīna
cond.Signal() // vai cond.Broadcast()
mu.Unlock()
Svarīgi, ka Wait() tiek izsaukts ar aizslēgtu mutex, un Wait() laikā mutex tiek īslaicīgi atbrīvots, lai citas gorutīnas varētu mainīt stāvokli un izsaukt Signal() vai Broadcast(). Pēc pamodināšanas, Wait() atkal aizslēdz mutex un turpina.
Tādējādi, sync.Cond ļauj efektīvi sinhronizēt gorutīnu izpildi, balstoties uz stāvokļa izmaiņām.