Sobes.tech
Junior — Middle

Použili ste v svojich projektoch mechanizmus synchronizácie pomocou sync.Cond?

sobes.tech AI

Odpoveď od AI

V projektoch v Go som použil sync.Cond na organizáciu čakania a oznámenia medzi gorutinami, keď bolo potrebné implementovať podmienkovú synchronizáciu. Napríklad, keď jedna gorutina musí čakať, kým iná vykoná určitú akciu alebo zmení stav.

Príklad použitia 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() // oznamujeme čakajúcej gorutine
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // čakáme na signál
	}
	fmt.Println("Gorutina pripravená")
	mu.Unlock()
}

Tento prístup je užitočný, keď je potrebná jemnejšia kontrola stavu a synchronizácie než len používanie kanálov.