Senior
Кайсы синхрондоштуруу primitives-лерин билесиз?
sobes.tech AI
AIден жооп
Go тилинде, ресурстарга атаандаштык менен кирүүнү башкаруу үчүн негизги бир нече синхрондоштуруу primitive бар:
- Mutex (sync.Mutex) — өз ара чыгарууну камсыз кылат, сыналган бөлүмгө кирүүнү бөгөттөйт.
- RWMutex (sync.RWMutex) — кеңейтилинген mutex, бир нече окуучу бир убакта окуй алат, бирок жазууну бөгөттөйт.
- WaitGroup (sync.WaitGroup) — goroutine топтому аяктагандан кийин күтүүгө мүмкүндүк берет.
- Cond (sync.Cond) — шарттуу өзгөрмө, окуя болгон учурда goroutine-лерди кабардар кылуу үчүн.
- Атомдук операциялар (sync/atomic) — өзгөрмөлөрдүн атомдук окуулары жана жазуулары үчүн төмөнкү деңгээлдеги операциялар.
Мындан тышкары, Go-да кеңири колдонулган каналдар (channels), алар goroutine-лерди синхрондоштуруу жана алардын ортосунда маалымат өткөрүү үчүн колдонулат, бул mutex-терди колдонбостон ишке ашырылат.
Mutex колдонуу мисалы:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
WaitGroup колдонуу мисалы:
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
// иш
}()
go func() {
defer wg.Done()
// иш
}()
wg.Wait()