Sobes.tech
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()