Sobes.tech
Junior — Middle

Оё дар лоиҳахоятон механизми ҳамоҳангсозии бо sync.Cond истифода бурдаед?

sobes.tech AI

Ҷавоб аз AI

Дар лоиҳаҳои Go, ман sync.Cond-ро барои ташкил кардани интизорӣ ва огоҳӣ байни goroutine-ҳо истифода мекардам, вақте ки лозим буд, ки ҳамоҳангсозии шартиро амалӣ созем. Масалан, вақте ки як goroutine бояд интизор шавад, то дигаре як амали муайянро иҷро кунад ё ҳолатро тағир диҳад.

Масали истифодаи 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() // огоҳӣ додан ба goroutine интизор
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // интизор сигнал
	}
	fmt.Println("Goroutine тайёр")
	mu.Unlock()
}

Ин усул барои назорати дақиқи вазъ ва ҳамоҳангсозӣ, ки аз истифодаи каналҳо фарқ мекунад, муфид аст.