Sobes.tech
Junior

Millised teised goroutine'i sünkroniseerimise viisid Go-s on kanalite kõrval?

sobes.tech AI

Vastus AI-lt

Lisaks kanalitele, Go keeles gorutinide sünteesimiseks saab kasutada:

  • sync.WaitGroup — võimaldab oodata, kuni gorutinide grupp lõpetab.
  • sync.Mutex — lukustus, et kaitsta jagatud ressursse samaaegse juurdepääsu eest.
  • sync.RWMutex — lukustus, mis jaguneb lugemis- ja kirjutamisosaks.
  • sync.Cond — tingimusmuutuja, et teavitada gorutineid sündmuse toimumisest.
  • atomaarseid operatsioone sync/atomic paketist — atomaarsete operatsioonide tegemiseks muutujatega ilma lukudeta.

Näide WaitGroup kasutamisest:

var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    // gorutine töö
}()
wg.Wait() // ootame, kuni kõik gorutined lõpetavad