Junior — Middle
Jak jest realizowany mechanizm wzajemnego wykluczania za pomocą Mutex w języku Go?
sobes.tech AI
Odpowiedź od AI
W języku Go do implementacji wzajemnego wykluczenia (mutex) używa się typu sync.Mutex. Pozwala on chronić krytyczne sekcje kodu przed jednoczesnym dostępem z wielu gorutyn, zapobiegając warunkom wyścigu.
Główne operacje:
Lock()— blokuje mutex, uniemożliwiając innym gorutynom dostęp.Unlock()— odblokowuje mutex, pozwalając innym gorutynom kontynuować.
Przykład użycia:
package main
import (
"fmt"
"sync"
)
func main() {
var mu sync.Mutex
counter := 0
mu.Lock() // Zabezpiecza mutex
counter++
fmt.Println("Licznik:", counter)
mu.Unlock() // Odblokowuje mutex
}
W środowiskach wielowątkowych mutex gwarantuje, że tylko jedna gorutyna wykonuje kod między Lock() a Unlock() na raz, co zapobiega nieprawidłowym zmianom danych współdzielonych.