Sobes.tech
Junior — Middle

Použili jste ve svých projektech mechanismus synchronizace pomocí sync.Cond?

sobes.tech AI

Odpověď od AI

V projektech v Go jsem použil sync.Cond k organizaci čekání a oznámení mezi gorutinami, když bylo potřeba implementovat podmíněnou synchronizaci. Například když jedna gorutina musí čekat, až jiná provede určitou akci nebo změní stav.

Příklad použití 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() // oznámení čekající gorutině
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // čekání na signál
	}
	fmt.Println("Goroutine je připravena")
	mu.Unlock()
}

Tento přístup je užitečný, když je potřeba jemnější kontrola stavu a synchronizace než pouhé používání kanálů.