Sobes.tech
Middle

RW Mutex ile normal bir mutex arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

sync.RWMutex, aynı anda birden fazla goroutine'un verileri okumasına izin verir, ancak sadece bir goroutine verileri yazabilir. sync.Mutex, başka bir goroutine'in kilidi almasını engeller (okuma veya yazma olsun) ilk goroutine kilidi serbest bırakana kadar.

  • sync.Mutex: Özel kilit. Kilitli veya değil. Aynı anda sadece bir goroutine mutex'i tutabilir. Sık veya benzer sürede okuma ve yazma işlemleri yapılıyorsa uygundur.

    // Mutex kullanım örneği
    var mu sync.Mutex
    var counter int
    
    func increment() {
        mu.Lock()
        counter++
        mu.Unlock()
    }
    
  • sync.RWMutex: Okuma ve yazma için kilit. Aynı anda birden fazla goroutine'un okuma yapmasına izin verir, ancak yazma kilidi özeldir. Yazma kilidi tutan bir goroutine, diğer yazma ve okuma işlemlerini engeller. Okuma kilidi tutan goroutines, yazma işlemlerini engeller, diğer okuma işlemlerini engellemez. Okuma işlemleri yazma işlemlerinden çok daha sık gerçekleşiyorsa uygundur.

    // RWMutex kullanım örneği
    var rwmu sync.RWMutex
    var data map[string]string = make(map[string]string)
    
    func readData(key string) string {
        rwmu.RLock() // Okuma kilidi alınır
        value := data[key]
        rwmu.RUnlock() // Okuma kilidi serbest bırakılır
        return value
    }
    
    func writeData(key, value string) {
        rwmu.Lock() // Yazma kilidi alınır
        data[key] = value
        rwmu.Unlock() // Yazma kilidi serbest bırakılır
    }
    

Ana farklar aşağıdaki tabloda özetlenebilir:

Özellik sync.Mutex sync.RWMutex
Kilit tipi Özel (okuma/yazma) Paylaşılan (okuma) + özel (yazma)
Aynı anda erişim Bir goroutine Birden fazla goroutine okuma yapabilir, bir tane yazma yapabilir
Okuma kilidi yöntemi Lock() RLock()
Yazma kilidi yöntemi Lock() Lock()
Okuma kilidi serbest bırakma Unlock() RUnlock()
Yazma kilidi serbest bırakma Unlock() Unlock()
Performans Daha basit, sık okuma durumunda yavaş olabilir Daha karmaşık, sık okuma ve nadir yazma durumlarında daha hızlı olabilir