Junior — Middle
Ko'p ipliqli muhitda resurslarga bir vaqtning o'zida kirish paytida yuzaga keladigan raqobat shartlarini qanday bartaraf qilish mumkin?
sobes.tech AI
AIdan javob
Go'da ko'p ipli muhitda ma'lumotlar urushlarini oldini olish uchun bir nechta yondashuvlar mavjud:
-
Mutexlar (sync.Mutex) — bo'lishilgan resurslarga kirishni bloklaydi, faqat bitta goroutine unga ishlov berishi mumkin bo'ladi.
-
Kanal (channels) — goroutine'lar o'rtasida xavfsiz ma'lumot almashishni tashkil qilish imkonini beradi, umumiy o'zgaruvchilarga to'g'ridan-to'g'ri kirishni oldini oladi.
-
sync/atomic paket — oddiy tiplarga atomik operatsiyalarni ta'minlaydi, oddiy operatsiyalarda urushlarni oldini olishga yordam beradi.
Mutex bilan misol:
import (
"sync"
)
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Kanalardan foydalanish:
ch := make(chan int)
func worker() {
for val := range ch {
// valni ishlash
}
}
func main() {
go worker()
ch <- 42
close(ch)
}
Usul tanlovi aniq vazifa va dastur tuzilishiga bog'liq.