Sobes.tech
Junior — Middle

თქვენ გამოიყენეთ სინქრონიზაციის მექანიზმი sync.Cond-ის გამოყენებით თქვენს პროექტებში?

sobes.tech AI

პასუხი AI-სგან

Go პროექტებში, მე გამოვიყენე sync.Cond გორუტინებს შორის მოლოდინის და შეტყობინების ორგანიზებისთვის, როდესაც საჭირო იყო პირობიანი სინქრონიზაცია. მაგალითად, როდესაც ერთი გორუტინა უნდა ელოდოს, სანამ მეორე შეასრულებს გარკვეულ მოქმედებას ან შეცვლის მდგომარეობას.

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() // შეტყობინება მოლოდინში გორუტინს
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // სიგნალის მოლოდინი
	}
	fmt.Println("Goroutine მზადაა")
	mu.Unlock()
}

ეს მიდგომა სასარგებლოა, როდესაც საჭიროა უფრო ზუსტი კონტროლი მდგომარეობასა და სინქრონიზაციაზე, ვიდრე უბრალოდ არხების გამოყენება.