Sobes.tech
Junior — Middle

Vysvětlete princip fungování synchronizačního mechanismu goroutin v kontextu konkurenčního provádění úkolů.

sobes.tech AI

Odpověď od AI

V jazyce Go jsou gorutiny lehké vlákna, která běží současně. Pro synchronizaci gorutin se používají mechanismy, které koordinují přístup ke sdíleným zdrojům a řídí provádění.

Hlavní mechanismy synchronizace:

  • Kanály (channels): umožňují přenos dat mezi gorutinami a zajišťují synchronizaci výměnou zpráv.
  • Mutexy (sync.Mutex): blokují přístup ke sdíleným datům, aby se zabránilo závodům.
  • WaitGroup (sync.WaitGroup): umožňuje čekat na dokončení skupiny gorutin.

Příklad s kanálem:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // čeká na data z kanálu
    fmt.Println("Přijatá hodnota:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // posílá data do kanálu
}

Zde kanál zajišťuje synchronizaci: goroutine worker čeká, dokud main nepošle hodnotu.