Junior — Middle
Haben Sie in Ihren Projekten einen Synchronisationsmechanismus mit sync.Cond verwendet?
sobes.tech KI
Antwort von AI
In Go-Projekten habe ich sync.Cond verwendet, um das Warten und die Benachrichtigung zwischen Goroutinen zu organisieren, wenn eine konditionale Synchronisation erforderlich war. Zum Beispiel, wenn eine Goroutine warten muss, bis eine andere eine bestimmte Aktion ausführt oder den Zustand ändert.
Beispiel für die Verwendung von 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() // Benachrichtigen der wartenden Goroutine
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // Warten auf das Signal
}
fmt.Println("Goroutine bereit")
mu.Unlock()
}
Dieser Ansatz ist nützlich, wenn eine feinere Kontrolle des Zustands und der Synchronisation erforderlich ist, als nur Kanäle zu verwenden.