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