Sobes.tech
Junior — Middle

Ce rol joacă primitivele de sincronizare în limbajul de programare Go?

sobes.tech AI

Răspuns de la AI

Primitivele de sincronizare din Go sunt utilizate pentru a gestiona accesul la resursele partajate și pentru a coordona executarea goroutine-urilor, pentru a evita condițiile de cursă și pentru a asigura corectitudinea programului.

Primitivele principale:

  • Mutex (sync.Mutex) — asigură excluderea mutuală, permițând doar unei goroutine să execute secțiunea critică simultan.
  • WaitGroup (sync.WaitGroup) — permite așteptarea finalizării unui grup de goroutine-uri.
  • Canal — canal pentru transmiterea datelor între goroutine-uri, care este în sine o primitive puternică de sincronizare.
  • RWMutex (sync.RWMutex) — permite mai multor goroutine-uri să citească datele în același timp, dar scrierea blochează pe toți.

Exemplu de utilizare a Mutex:

var mu sync.Mutex
var contor int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    contor++
}

Astfel, primitivele de sincronizare ajută la evitarea conflictelor în accesul paralel la date și asigură o interacțiune corectă între goroutine-uri.