Junior — Middle
Paaiškinkite goroutine'ų sinchronizacijos mechanizmo veikimo principą konkurencinio užduočių vykdymo kontekste.
sobes.tech AI
Atsakymas iš AI
Go kalboje gorutinos yra lengvi srautai, kurie vykdomi lygiagrečiai. Gorutinos sinchronizacijai naudojami mechanizmai, kurie koordinuoja prieigą prie bendrų išteklių ir tvarko vykdymo tvarką.
Pagrindiniai sinchronizacijos mechanizmai:
- Kanalai (channels): leidžia perduoti duomenis tarp gorutinų ir užtikrina sinchronizaciją per žinučių mainus.
- Mutex'ai (sync.Mutex): blokuoja prieigą prie bendrų duomenų, siekiant išvengti lenktynių sąlygų.
- WaitGroup (sync.WaitGroup): leidžia laukti, kol baigsis grupė gorutinų.
Pavyzdys su kanalu:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // laukia duomenų iš kanalo
fmt.Println("Gauta reikšmė:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // siunčia duomenis į kanalą
}
Čia kanalas užtikrina sinchronizaciją: worker gorutina laukia, kol pagrindinė funkcija išsiųs reikšmę.