Sobes.tech
Junior — Middle

Czy używałeś mechanizmu synchronizacji za pomocą sync.Cond w swoich projektach?

sobes.tech AI

Odpowiedź od AI

W projektach w Go używałem sync.Cond do organizacji oczekiwania i powiadamiania między gorutynami, gdy konieczne było zaimplementowanie warunkowej synchronizacji. Na przykład, gdy jedna gorutyna musi czekać, aż inna wykona określone działanie lub zmieni stan.

Przykład użycia 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() // powiadamiamy oczekującą gorutynę
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // czekamy na sygnał
	}
	fmt.Println("Goroutine gotowa")
	mu.Unlock()
}

Takie podejście jest przydatne, gdy potrzebujesz bardziej precyzyjnie kontrolować stan i synchronizację niż tylko używanie kanałów.