Middle
Как работи условната променлива (sync.Cond) в Go?
sobes.tech AI
Отговор от AI
В езика Go, sync.Cond е условна променлива, която се използва за координиране на горутините, позволявайки на една или повече горутини да чакат настъпването на определено условие.
Основни методи:
Wait(): блокира текущата горутина и освобождава свързания mutex, докато не бъде извиканSignal()илиBroadcast().Signal(): събужда една горутина, която чака на условната променлива.Broadcast(): събужда всички горутини, чакащи на условната променлива.
Пример за използване:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Горутин, която чака условието
go func() {
mu.Lock()
cond.Wait() // чака сигнал
// условието е изпълнено
mu.Unlock()
}()
// Горутин, която сигнализира
mu.Lock()
// променя състоянието, което чака първата горутина
cond.Signal() // или cond.Broadcast()
mu.Unlock()
Важно е Wait() да се извиква с блокиран mutex, и при извикване на Wait(), mutex-ът временно се освобождава, за да могат други горутини да променят състоянието и да извикат Signal() или Broadcast(). След събуждане, Wait() отново блокира mutex преди да върне.
По този начин, sync.Cond позволява ефективно синхронизиране на изпълнението на горутините въз основа на промени в състоянието.