Junior — Middle
Explicați principiul de funcționare al mecanismului de sincronizare a goroutine-urilor în contextul executării concurente a sarcinilor.
sobes.tech AI
Răspuns de la AI
În Go, goroutine-urile sunt fire ușoare care rulează concurent. Pentru sincronizarea goroutine-urilor, se utilizează mecanisme care coordonează accesul la resursele partajate și ordonează execuția.
Principalele mecanisme de sincronizare:
- Canale (channels): permit transferul de date între goroutine-uri, asigurând sincronizarea prin schimbul de mesaje.
- Mutex-uri (sync.Mutex): blochează accesul la datele partajate pentru a evita condițiile de cursă.
- WaitGroup (sync.WaitGroup): permite așteptarea finalizării unui grup de goroutine-uri.
Exemplu cu canal:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // așteaptă date din canal
fmt.Println("Valoare primită:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // trimite date în canal
}
Aici, canalul asigură sincronizarea: goroutine-ul worker așteaptă până când main trimite o valoare.