Sobes.tech
Junior — Middle

Heeft u in uw projecten een synchronisatie-mechanisme met sync.Cond gebruikt?

sobes.tech AI

Antwoord van AI

In Go-projecten heb ik sync.Cond gebruikt om het wachten en de notificatie tussen goroutines te organiseren, wanneer conditionele synchronisatie nodig was. Bijvoorbeeld wanneer een goroutine moet wachten tot een andere een bepaalde actie uitvoert of de status wijzigt.

Voorbeeld van het gebruik van 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() // notificatie aan de wachtende goroutine
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // wacht op signaal
	}
	fmt.Println("Goroutine klaar")
	mu.Unlock()
}

Deze aanpak is handig wanneer je meer fijnmazige controle over de status en synchronisatie nodig hebt dan alleen het gebruik van kanalen.