Sobes.tech
Junior — Middle

Vai jūsu projektos esat izmantojis sinhronizācijas mehānismu ar sync.Cond?

sobes.tech AI

Atbilde no AI

Go projektos laikā es izmantoju sync.Cond, lai organizētu gaidīšanu un paziņojumu starp gorutīnām, kad būtu nepieciešama nosacīta sinhronizācija. Piemēram, kad viena gorutina gaida, kamēr otra veic noteiktu darbību vai maina stāvokli.

sync.Cond izmantošanas piemērs:

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() // paziņojam gaidošajai gorutīnai
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // gaidām signālu
	}
	fmt.Println("Gorutina gatava")
	mu.Unlock()
}

Šī pieeja ir noderīga, ja nepieciešama smalkāka stāvokļa un sinhronizācijas kontrole nekā tikai ar kanāliem.