Sobes.tech
Senior

Qaysi sinxronizatsiya primitivalarini bilasiz?

sobes.tech AI

AIdan javob

Go tilida, resurslarga konkurent kirishni boshqarish uchun bir nechta asosiy sinxronizatsiya primitive mavjud:

  • Mutex (sync.Mutex) — o'zaro chiqarishni ta'minlaydi, kritik bo'limga kirishni bloklaydi.
  • RWMutex (sync.RWMutex) — kengaytirilgan mutex, bir nechta o'quvchilarga bir vaqtning o'zida o'qishga ruxsat beradi, lekin yozishni bloklaydi.
  • WaitGroup (sync.WaitGroup) — gorutinalarning yakunlanishini kutishga imkon beradi.
  • Cond (sync.Cond) — voqea yuz berayotganini gorutinalarga bildirish uchun shartli o'zgaruvchi.
  • Atomik operatsiyalar (sync/atomic) — o'zgaruvchilarni atomik o'qish va yozish uchun past darajadagi operatsiyalar.

Shuningdek, Go da keng tarqalgan kanallar (channels) yordamida gorutinalarni sinxronlashtirish va ular orasida ma'lumotlarni uzatish mumkin, bu esa mutexlardan foydalanmasdan amalga oshiriladi.

Mutexdan foydalanish misoli:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

WaitGroupdan foydalanish misoli:

var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    // ish
}()
go func() {
    defer wg.Done()
    // ish
}()
wg.Wait()