Sobes.tech
Junior

Co w Go zapewnia bezpieczeństwo wątków (thread safety)?

sobes.tech AI

Odpowiedź od AI

Bezpieczeństwo wątkowe w Go jest zapewnione przez kilka mechanizmów:

  • Goroutines — lekkie wątki umożliwiające wykonywanie kodu równolegle.
  • Kanały — główne narzędzie do bezpiecznej wymiany danych między goroutines bez użycia zmiennych współdzielonych.
  • Pakiet sync — zawiera primitive synchronizacji, takie jak Mutex do blokowania sekcji krytycznych, RWMutex do rozdzielenia blokad na odczyt i zapis oraz WaitGroup do oczekiwania na zakończenie grupy goroutines.

Przykład użycia mutexu do ochrony wspólnego zasobu:

import (
    "sync"
)

var mu sync.Mutex
var licznik int

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

W ten sposób bezpieczeństwo wątkowe w Go osiąga się poprzez poprawne użycie goroutines, kanałów i primitive synchronizacji z pakietu sync.