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