Sobes.tech
Middle

Koja je razlika između RW Mutex i običnog mutexa?

sobes.tech АИ

Одговор од АИ

sync.RWMutex омогућава више горутини да читају податке истовремено, али само једна горутина може писати податке. sync.Mutex блокира приступ било којој другој горутини која покушава да добије закључавање (било за читање или писање) док прва горутина не ослободи закључавање.

  • sync.Mutex: Ексклузивно закључавање. Или је закључано, или није. Само једна горутина може држати мјутекс у било ком тренутку. Погодно када операције читања и писања често или имају слично трајање.

    // Пример коришћења Mutex
    var mu sync.Mutex
    var counter int
    
    func increment() {
        mu.Lock()
        counter++
        mu.Unlock()
    }
    
  • sync.RWMutex: Закључавање за читање и писање. Омогућава више горутини да држе закључавање за читање истовремено, али закључавање за писање је ексклузивно. Горутине које држе закључавање за писање блокирају друге операције писања и читања. Горутине које држе закључавање за читање блокирају операције писања, али не друге операције читања. Погодно када операције читања значајно преовлађују над операцијама писања.

    // Пример коришћења RWMutex
    var rwmu sync.RWMutex
    var data map[string]string = make(map[string]string)
    
    func readData(key string) string {
        rwmu.RLock() // Добијање закључавања за читање
        value := data[key]
        rwmu.RUnlock() // Ослобађање закључавања за читање
        return value
    }
    
    func writeData(key, value string) {
        rwmu.Lock() // Добијање закључавања за писање
        data[key] = value
        rwmu.Unlock() // Ослобађање закључавања за писање
    }
    

Главне разлике могу се сумирати у табели:

Карактеристика sync.Mutex sync.RWMutex
Тип закључавања Ексклузивно (читање/писање) Заједничко (читање) + ексклузивно (писање)
Истовремени приступ Једна горутина Многа горутини за читање, једна за писање
Метод за закључавање за читање Lock() RLock()
Метод за закључавање за писање Lock() Lock()
Метод за откључавање за читање Unlock() RUnlock()
Метод за откључавање за писање Unlock() Unlock()
Производња Једноставније, потенцијално спорије при често читању Компликованије, потенцијално брже при често читању и ретким записима