Sobes.tech
Junior — Middle

Loyihalaringizda sync.Cond yordamida sinxronizatsiya mexanizmini qoʻlladingizmi?

sobes.tech AI

AIdan javob

Go loyihalarida, goroutinlar o'rtasida kutish va bildirishni tashkil qilish uchun sync.Cond dan foydalanardim, ayniqsa shartli sinxronizatsiya amalga oshirilishi kerak bo'lsa. Masalan, bir goroutine boshqa biror harakatni bajarishini yoki holatni o'zgartirishini kutishi kerak bo'lsa.

sync.Cond dan foydalanish misoli:

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() // kutayotgan goroutine'ga bildirish
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // signalni kutish
	}
	fmt.Println("Goroutine tayyor")
	mu.Unlock()
}

Bu yondashuv, kanallardan ko'ra yanada nozikroq nazorat qilish uchun foydalidir.