Junior — Middle
Jakie typy wzajemnych wykluczeń (Mutex) są zaimplementowane w standardowej bibliotece Go?
sobes.tech AI
Odpowiedź od AI
W standardowej bibliotece Go zaimplementowany jest główny typ wykluczenia wzajemnego: sync.Mutex. To prosty mutex, który zapewnia blokadę i odblokowanie w celu ochrony krytycznych sekcji kodu przed jednoczesnym dostępem.
Ponadto istnieje sync.RWMutex — rozszerzona wersja mutexa, która pozwala wielu czytelnikom na jednoczesne utrzymanie blokady, ale zapis jest blokowany wyłącznie.
Przykład użycia sync.Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
I przykład z sync.RWMutex:
var rwMu sync.RWMutex
var data int
func readData() int {
rwMu.RLock()
defer rwMu.RUnlock()
return data
}
func writeData(val int) {
rwMu.Lock()
defer rwMu.Unlock()
data = val
}