Sobes.tech
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.