Middle
Jak działa zmienna warunkowa (sync.Cond) w Go?
sobes.tech AI
Odpowiedź od AI
W języku Go, sync.Cond to zmienna warunkowa używana do koordynacji gorutyn, umożliwiająca jednej lub wielu gorutynom oczekiwanie na spełnienie określonego warunku.
Główne metody:
Wait(): blokuje bieżącą gorutynę i zwalnia powiązany mutex, aż do wywołaniaSignal()lubBroadcast().Signal(): budzi jedną gorutynę oczekującą na zmiennej warunkowej.Broadcast(): budzi wszystkie gorutiny oczekujące na zmiennej warunkowej.
Przykład użycia:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Gorutyna oczekująca na warunek
go func() {
mu.Lock()
cond.Wait() // czeka na sygnał
// warunek spełniony
mu.Unlock()
}()
// Gorutyna wysyłająca sygnał
mu.Lock()
// zmienia stan, na który czeka pierwsza gorutyna
cond.Signal() // lub cond.Broadcast()
mu.Unlock()
Ważne, aby Wait() było wywoływane z zablokowanym mutexem, a podczas wywołania Wait(), mutex jest tymczasowo zwalniany, aby inne gorutiny mogły zmienić stan i wywołać Signal() lub Broadcast(). Po przebudzeniu, Wait() ponownie blokuje mutex przed powrotem.
W ten sposób, sync.Cond pozwala efektywnie synchronizować wykonywanie gorutyn na podstawie zmiany stanu.