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