Sobes.tech
Junior — Middle

Ar naudojote sinchronizacijos mechanizmą su sync.Cond savo projektuose?

sobes.tech AI

Atsakymas iš AI

Go projektuose aš naudoju sync.Cond, kad organizuočiau laukimą ir pranešimą tarp gorutinų, kai reikalinga sąlyginė sinchronizacija. Pavyzdžiui, kai viena gorutina turi laukti, kol kita atliks tam tikrą veiksmą arba pakeis būseną.

sync.Cond naudojimo pavyzdys:

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() // pranešimas laukiančiai gorutinai
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // laukia signalo
	}
	fmt.Println("Gorutina pasiruošusi")
	mu.Unlock()
}

Šis požiūris yra naudingas, kai reikia tikslesnės būsenos ir sinchronizacijos kontrolės nei paprastas kanalų naudojimas.