Sobes.tech
Junior — Middle

Jaką rolę odgrywają primitive synchronizacji w języku programowania Go?

sobes.tech AI

Odpowiedź od AI

Prymitywy synchronizacji w Go służą do zarządzania dostępem do zasobów współdzielonych i koordynacji wykonywania gorutyn, aby uniknąć warunków wyścigu i zapewnić poprawność programu.

Główne primitive:

  • Mutex (sync.Mutex) — zapewnia wzajemne wykluczanie, pozwalając tylko jednej gorutynie na jednoczesne wykonywanie sekcji krytycznej.
  • WaitGroup (sync.WaitGroup) — pozwala czekać na zakończenie grupy gorutyn.
  • Kanał — kanał do przesyłania danych między gorutynami, który sam w sobie jest potężną primitive synchronizacji.
  • RWMutex (sync.RWMutex) — pozwala wielu gorutynom czytać dane jednocześnie, ale zapis blokuje wszystkich.

Przykład użycia Mutex:

var mu sync.Mutex
var licznik int

func inkrementuj() {
    mu.Lock()
    defer mu.Unlock()
    licznik++
}

Przy tym, primitive synchronizacji pomagają unikać konfliktów przy równoległym dostępie do danych i zapewniają poprawną interakcję między gorutynami.