Sobes.tech
Middle+

Goда goroutine'лердин синхрондоштуусу үчүн кандай primitives бар?

sobes.tech AI

AIден жооп

Go тилинде, горутиндерди синхрондоо үчүн төмөнкү негизги primitives колдонулат:

  • Mutex (sync.Mutex) — өз ара чыгарууну камсыз кылат, бөлүшүлгөн ресурстарга кирүүнү бөгөттөйт.
  • RWMutex (sync.RWMutex) — Mutex кеңейтүүсү, бир убакта бир нече горутин окууга уруксат берет, бирок жазууга бөгөт коет.
  • WaitGroup (sync.WaitGroup) — горутиндердин топтому аяктагандан кийин күтүүгө мүмкүндүк берет.
  • Channel (chan) — горутиндер арасында маалымат өткөрүү үчүн канал, билдирүүлөр аркылуу синхрондоштуруу камсыз кылынат.
  • Once (sync.Once) — белгилүү бир функциянын бир гана жолу ишке ашырылышын кепилдейт.
  • Cond (sync.Cond) — шарттуу өзгөрмө, көбүрөөк комплекстүү синхрондоштуруу үчүн, мисалы, белгилүү бир абалды күтүү.

WaitGroup жана Mutex колдонуу мисалы:

var mu sync.Mutex
var wg sync.WaitGroup
var counter int

func increment() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}

func main() {
    wg.Add(3)
    go increment()
    go increment()
    go increment()
    wg.Wait()
    fmt.Println("Санаачык:", counter)
}