Sobes.tech
Junior — Middle

Môžete vysvetliť, čo je podmienená premenná sync.Cond v jazyku Go a na čo sa používa?

sobes.tech AI

Odpoveď od AI

V jazyku Go je sync.Cond štruktúra, ktorá implementuje podmienkovú premennú a slúži na synchronizáciu gorutín. Umožňuje jednej alebo viacerým gorutinám čakať na splnenie určitej podmienky a informovať ostatné gorutiny o tom, že sa táto podmienka zmenila.

Hlavné metódy sync.Cond:

  • Wait() — blokuje aktuálnu gorutinu, kým iná gorutina ne zavolá Signal() alebo Broadcast().
  • Signal() — prebudí jednu gorutinu čakajúcu na podmienkovej premennej.
  • Broadcast() — prebudí všetky gorutiny čakajúce na podmienkovej premennej.

Príklad použitia:

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

// Gorutina, ktorá čaká na signál
go func() {
    mu.Lock()
    cond.Wait() // čaká na signál
    // po prebudení vykonáva akcie
    mu.Unlock()
}()

// Gorutina, ktorá posiela signál
mu.Lock()
cond.Signal() // prebudí jednu gorutinu
mu.Unlock()

Týmto spôsobom sync.Cond pomáha koordinovať prácu viacerých gorutín, ktoré čakajú na splnenie určitých podmienok.