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.