Sobes.tech
Junior — Middle

Da li ste koristili mehanizam za sinhronizaciju pomoću sync.Cond u svojim projektima?

sobes.tech АИ

Одговор од АИ

U Go projektima, koristio sam sync.Cond za organizaciju čekanja i obaveštavanja između gorutina, kada je bilo potrebno implementirati uslovnu sinhronizaciju. Na primer, kada jedna gorutina mora da čeka da druga izvrši određenu radnju ili promeni stanje.

Primer korišćenja 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() // obaveštavamo čekajuću gorutinu
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // čekamo signal
	}
	fmt.Println("Gorutina spremna")
	mu.Unlock()
}

Ovaj pristup je koristan kada je potrebno finije kontrolisati stanje i sinhronizaciju nego samo korišćenjem kanala.