Junior — Middle
Leg uit hoe het synchronisatie-mechanisme van goroutines werkt in de context van gelijktijdige taakuitvoering.
sobes.tech AI
Antwoord van AI
In Go zijn goroutines lichtgewicht threads die gelijktijdig worden uitgevoerd. Voor het synchroniseren van goroutines worden mechanismen gebruikt die de toegang tot gedeelde bronnen coördineren en de uitvoering ordenen.
Belangrijkste synchronisatie-mechanismen:
- Kanalen (channels): maken gegevensoverdracht tussen goroutines mogelijk en zorgen voor synchronisatie via berichtuitwisseling.
- Mutexen (sync.Mutex): blokkeren de toegang tot gedeelde gegevens om racecondities te voorkomen.
- WaitGroup (sync.WaitGroup): maakt het mogelijk te wachten tot een groep goroutines klaar is.
Voorbeeld met kanaal:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // wacht op gegevens van het kanaal
fmt.Println("Ontvangen waarde:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // verzendt gegevens naar het kanaal
}
Hier zorgt het kanaal voor synchronisatie: de worker goroutine wacht tot main een waarde verzendt.