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.