Sobes.tech
Senior

Hangi senkronizasyon temel öğelerini biliyorsunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, kaynaklara eşzamanlı erişimi yönetmek için birkaç temel senkronizasyon primitive vardır:

  • Mutex (sync.Mutex) — karşılıklı dışlama sağlar, kritik bölüme erişimi engeller.
  • RWMutex (sync.RWMutex) — genişletilmiş mutex, birden fazla okuyucunun aynı anda okumasına izin verir, ancak yazmayı engeller.
  • WaitGroup (sync.WaitGroup) — bir grup goroutine'in tamamlanmasını beklemeye olanak tanır.
  • Cond (sync.Cond) — bir olayın gerçekleştiğini goroutine'lere bildirmek için koşullu değişken.
  • Atomik işlemler (sync/atomic) — değişkenlerin atomik okuma ve yazma işlemleri için düşük seviyeli işlemler.

Ayrıca, Go'da kanallar (channels) yaygın olarak kullanılır, bunlar goroutine'leri senkronize etmeye ve aralarında veri iletmeye olanak tanır, mutex kullanmadan.

Mutex kullanım örneği:

var mu sync.Mutex
var counter int

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

WaitGroup kullanım örneği:

var wg sync.WaitGroup
wg.Add(2)
go func() {
    defer wg.Done()
    // çalışma
}()
go func() {
    defer wg.Done()
    // çalışma
}()
wg.Wait()