Sobes.tech
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.