Sobes.tech
Junior — Middle

Ați folosit vreodată un mecanism de sincronizare cu sync.Cond în proiectele dvs.?

sobes.tech AI

Răspuns de la AI

În proiectele Go, am folosit sync.Cond pentru a organiza așteptarea și notificarea între goroutine-uri, atunci când era necesară o sincronizare condițională. De exemplu, când o goroutine trebuie să aștepte ca alta să efectueze o anumită acțiune sau să schimbe starea.

Exemplu de utilizare a 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() // notificăm goroutine-ul în așteptare
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // așteptăm semnalul
	}
	fmt.Println("Goroutine gata")
	mu.Unlock()
}

Această abordare este utilă atunci când ai nevoie de un control mai fin asupra stării și sincronizării decât simpla utilizare a canalelor.