Sobes.tech
Junior — Middle

Жоболоруңузда sync.Cond аркылуу синхрондоштуруу механизмин колдондуңузбу?

sobes.tech AI

AIден жооп

Go долбоорлорунда, мен goroutine'лер арасында күтүүнү жана кабарлоону уюштуруу үчүн sync.Cond колдонуп келгем, шарттуу синхрондоштуруу керек болгондо. Мисалы, бир 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()
}

Бул ыкма, каналдардан айырмаланып, абал жана синхрондоштурууну так көзөмөлдөөгө мүмкүндүк берет.