Sobes.tech
Middle

Фарқи байни RW Mutex ва mutex оддӣ чист?

sobes.tech AI

Ҷавоб аз AI

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()
Маҳсулнокӣ Осонтар, эҳтимолан сусттар дар вақти зиёд хондан Мураккабтар, эҳтимолан тезтар дар вақти зиёд хондан ва камтар навиштҳо