sync.Cond (переменная условия) — это примитив синхронизации, который позволяет набору горутин ожидать, пока определенное условие станет истинным. Он всегда связан с sync.Locker (обычно sync.Mutex или sync.RWMutex). Горутины ожидают условной переменной, используя Cond.Wait(), которая атомарно снимает связанную блокировку и приостанавливает горутину. Другие горутины могут сигнализировать одной (Cond.Signal()) или всем (Cond.Broadcast()) ожидающим горутинам, когда условие могло измениться.
-
Подходящий сценарий (ограниченный буфер/производитель-потребитель): «Классический вариант использования — реализация ограниченного буфера или очереди производитель-потребитель, где производители добавляют элементы в буфер ограниченного размера, а потребители удаляют элементы.
-
Производители ждут, если буфер полон.
-
Потребители ждут, если буфер пуст.
-
Когда производитель добавляет элемент в полный буфер, он сигнализирует потребителям, что могут быть доступны элементы. он сигнализирует производителям о том, что может быть доступно место. Условная переменная используется для управления ожиданием и сигнализацией в зависимости от состояния буфера (полный или пустой), в то время как мьютекс защищает доступ к самому буферу».
Итог
sync.Cond (переменная условия) — это примитив синхронизации, который позволяет набору горутин ожидать, пока определенное условие станет истинным.