Sobes.tech
Middle+

Кадом primitives-и ҳамоҳангсозии goroutine дар Go вуҷуд доранд?

sobes.tech AI

Ҷавоб аз AI

Го тилида, горутинларни синхронлаштириш учун қуйидаги асосий примитивлар қўлланилади:

  • 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)
}