Sobes.tech
Junior — Middle

Használtál valamilyen szinkronizációs mechanizmust a sync.Cond segítségével a projektjeidben?

sobes.tech MI

Válasz az MI-től

Go projektekben a sync.Cond-t használtam a goroutine-ok közötti várakozás és értesítés szervezésére, amikor feltételes szinkronizációra volt szükség. Például, amikor egy goroutine-nek várnia kell, hogy egy másik végrehajt egy adott műveletet vagy megváltoztatja az állapotot.

A sync.Cond használatának példája:

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() // értesítjük a várakozó goroutine-t
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // várakozás a jelzésre
	}
	fmt.Println("Goroutine készen")
	mu.Unlock()
}

Ez a megközelítés akkor hasznos, ha finomabb ellenőrzésre van szükség az állapot és a szinkronizáció felett, mint csatornák használata esetén.