Sobes.tech
Back to questions
Junior — Middle
81

Применяли ли вы механизм синхронизации с помощью sync.Cond в своих проектах?

Answer from AI

sobes.tech AI

В проектах на Go я использовал sync.Cond для организации ожидания и уведомления между горутинами, когда нужно было реализовать условную синхронизацию. Например, когда одна горутина должна ждать, пока другая выполнит определённое действие или изменит состояние.

Пример использования sync.Cond:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	mu := sync.Mutex{}
	cond := sync.NewCond(&mu)
	ready := false

	go func() {
		time.Sleep(time.Second)
		mu.Lock()
		ready = true
		cond.Signal() // уведомляем ожидающую горутину
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // ждем сигнала
	}
	fmt.Println("Горутина готова")
	mu.Unlock()
}

Такой подход полезен, когда нужно более тонко контролировать состояние и синхронизацию, чем просто использовать каналы.