Junior — Middle
Jakie rodzaje mechanizmów blokowania wzajemnego wykluczenia stosujesz w swoich projektach?
sobes.tech AI
Odpowiedź od AI
W Go, aby zaimplementować wzajemne wykluczanie, najczęściej używam standardowego typu sync.Mutex. Jest prosty w użyciu i skutecznie blokuje krytyczne sekcje kodu.
Ponadto stosuję sync.RWMutex, gdy muszę rozróżnić dostęp do odczytu i zapisu — kilka gorutyn może odczytywać dane jednocześnie, ale zapis blokuje wszystkich.
W niektórych przypadkach używam kanałów (channels) do synchronizacji, co pozwala uniknąć jawnych blokad i uczynić kod bardziej deklaratywnym.
Przykład z sync.Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
W ten sposób wybór mechanizmu zależy od konkretnego zadania i wymagań dotyczących wydajności.