0Pricing
Go Academy · Ders

sync.Mutex ve sync.RWMutex

Kilit kullanma ve okuma-yazma kilidi örüntüleri

sync.Mutex ve sync.RWMutex, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Kilitler Neden Kullanılır?

Birden fazla eşzamanlı rutin değiştirilebilir durumu paylaştığında, eşzamanlı okuma ve yazma işlemleri veri yarışlarına neden olur. Bir kilit erişimi sıraya koyarak kritik bölüme aynı anda yalnızca bir eşzamanlı rutinin girmesini sağlar.

sync.Mutex Temelleri

Paylaşılan durumu okumadan veya yazmadan önce kilitleyin; ardından Unlock çağırın. İşlev panik oluştursa bile kilidin açılmasını garanti etmek için defer kullanın.

var mu sync.Mutex
var counter int

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

Bir Yapıya Mutex Gömme

Mutex'i koruduğu yapıya gömün. Geleneksel olarak kilit, koruduğu alanların hemen üstünde bildirilir.

type SafeCounter struct {
    mu sync.Mutex
    v  map[string]int
}
func (c *SafeCounter) Inc(key string) {
    c.mu.Lock()
    defer c.mu.Unlock()
    c.v[key]++
}

Mutex'i Kopyalamayın

Bir Mutex ilk kullanımından sonra kopyalanmamalıdır. Onu işaretçi olarak iletin veya işaretçi olarak iletilen bir yapıya gömün. go vet aracı kopyaları algılar.

sync.RWMutex

sync.RWMutex, birden fazla okuyucunun eşzamanlı çalışmasına ancak yalnızca bir yazıcının çalışmasına izin verir. Okumaların baskın, yazmaların nadir olduğu durumlarda aktarım hızını artırmak için kullanın.

var rw sync.RWMutex
var data map[string]int

func read(k string) int {
    rw.RLock()
    defer rw.RUnlock()
    return data[k]
}
func write(k string, v int) {
    rw.Lock()
    defer rw.Unlock()
    data[k] = v
}

RLock ve Lock Karşılaştırması

RLock, okuma kilidi (paylaşımlı) edinir; Lock ise yazma kilidi (özel) edinir. Bekleyen bir yazma kilidi, yeni okuma kilitlerini engelleyerek yazıcının aç kalmasını önler.

TryLock (Go 1.18+)

mu.TryLock(), kilidi yalnızca o anda açık olduğunda edinir ve bir doğru/yanlış değeri döndürür. Engellemenin kabul edilemez olduğu durumlarda kullanışlıdır.

if mu.TryLock() {
    defer mu.Unlock()
    // critical section
}

Kilitlenmeler

Kilitlenme, A eşzamanlı rutini 1. kilidi tutup 2. kilidi beklerken B eşzamanlı rutininin 2. kilidi tutup 1. kilidi beklemesiyle oluşur. Kilitleri her zaman aynı sırayla edinin ve kritik bölümleri kısa tutun.

Kilit Ayrıntı Düzeyi

Kaba taneli kilidi anlamak daha kolaydır ancak eşzamanlılığı azaltır. İnce taneli kilitleme aktarım hızını artırır, fakat karmaşıklığı ve kilitlenme riskini yükseltir. Kaba taneli kilitle başlayın; profil oluşturma işlemi çekişme olduğunu gösterirse iyileştirin.

Kilit mi Kanal mı?

Birçok okuyucu veya yazıcı tarafından paylaşılan durumu korurken kilit kullanın. Verilerin sahipliğini eşzamanlı rutinler arasında aktarırken kanal kullanın. Kanallar iletişim, kilitler eşzamanlama içindir.

sync.Locker Arabirimi

sync.Locker, Lock ve Unlock yöntemlerini içeren bir arabirimdir. Hem Mutex hem de RWMutex bunu uygular; böylece yardımcı işlevler her iki türü de kabul edebilir.

Hızlı Kontrol

sync.RWMutex'i sync.Mutex yerine ne zaman kullanmalısınız?

Özet: Mutex ve RWMutex

Ana noktalar:

  • Mutex erişimi serileştirir; Unlock işlemini her zaman defer edin
  • İlk kullanımdan sonra bir Mutex'i asla kopyalamayın
  • RWMutex: birden çok okuyucu VEYA tek bir yazıcı
  • Kilitlenmeleri önlemek için kilitleri tutarlı bir sırayla alın

Sıkça Sorulan Sorular

“sync.Mutex ve sync.RWMutex” dersi ücretsiz mi?

Evet — “sync.Mutex ve sync.RWMutex” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“sync.Mutex ve sync.RWMutex” dersinde ne öğreneceğim?

Kilit kullanma ve okuma-yazma kilidi örüntüleri Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“sync.Mutex ve sync.RWMutex” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. sync.Mutex ve sync.RWMutex
  2. sync.WaitGroup
  3. sync.Once ve sync.Map
  4. Yarış Dedektörü ve Güvenli Örüntüler
← Go Academy Sayfasına Dön