Sobes.tech
Middle+

Jaké primitivy synchronizace gorutin v Go existují?

sobes.tech AI

Odpověď od AI

V jazyce Go se pro synchronizaci gorutin používají následující základní primitivy:

  • Mutex (sync.Mutex) — zajišťuje vzájemné vyloučení tím, že blokuje přístup ke sdíleným zdrojům.
  • RWMutex (sync.RWMutex) — rozšíření Mutex, které umožňuje více čtením současně, ale blokuje zápis.
  • WaitGroup (sync.WaitGroup) — umožňuje čekat na dokončení sady gorutin.
  • Channel (chan) — kanál pro přenos dat mezi gorutinami, zajišťuje synchronizaci prostřednictvím odesílání zpráv.
  • Once (sync.Once) — zaručuje, že určitá funkce bude provedena pouze jednou.
  • Cond (sync.Cond) — podmíněná proměnná pro složitější synchronizaci, například čekání na určitý stav.

Příklad použití WaitGroup a Mutex:

var mu sync.Mutex
var wg sync.WaitGroup
var counter int

func increment() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}

func main() {
    wg.Add(3)
    go increment()
    go increment()
    go increment()
    wg.Wait()
    fmt.Println("Čítač:", counter)
}