Sobes.tech
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 izsaukts Signal() vai Broadcast().
  • 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.