Обяснете какво представлява условната променлива и как се използва за синхронизиране на нишки.
sobes.tech AI
Отговор от AI
Променливата условие (condition variable) е механизъм за синхронизация на нишки, който позволява на една или повече нишки да чакат настъпването на определено условие, докато друга нишка ги уведомява за промяна в състоянието.
В Go, условните променливи се реализират чрез типа sync.Cond. Той работи заедно с мютекс (sync.Mutex), който защитава споделените данни. Нишката, която иска да чака, извиква Wait(), което освобождава мютекса и блокира, докато друга нишка не извика Signal() (за събуждане на една нишка) или Broadcast() (за събуждане на всички чакащи).
Пример за използване:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Нишка, която чака
mu.Lock()
for !sharedDataReady {
cond.Wait() // освобождава mu и чака сигнал
}
// Тук sharedDataReady == true
mu.Unlock()
// Нишка, която променя състоянието
mu.Lock()
sharedDataReady = true
cond.Signal() // или cond.Broadcast(), за събуждане на чакащите
mu.Unlock()
По този начин, условната променлива помага за организиране на правилното очакване и уведомяване между нишките, като избягва активното ползване на процесора и състезателните условия.