Sobes.tech
Junior — Middle

Използвали ли сте механизъм за синхронизация с sync.Cond в проектите си?

sobes.tech AI

Отговор от 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()
}

Този подход е полезен, когато е необходимо по-фино контролиране на състоянието и синхронизацията, отколкото просто използване на канали.