gpt4 book ai didi

go - 为什么存在 sync.Mutex?

转载 作者:数据小太阳 更新时间:2023-10-29 03:43:20 25 4
gpt4 key购买 nike

为什么 sync.Mutex 存在,而我们有 sync.RWMutex?我可以锁定/解锁 rw 互斥量。它们之间的主要区别是什么?

最佳答案

确实可以使用 sync.RWMutex每当你需要 sync.Mutex .

我认为两者都存在,因为有很多情况下一个sync.Mutex就足够了(你不需要读写级别的锁),而sync的实现。 Mutex 更简单:需要更少的内存,而且很可能更快。

sync.Mutex 只有 8 个字节:

type Mutex struct {
state int32
sema uint32
}

虽然 sync.RWMutex 是 8 + 16 = 24 字节(它包括一个 sync.Mutex):

type RWMutex struct {
w Mutex // held if there are pending writers
writerSem uint32 // semaphore for writers to wait for completing readers
readerSem uint32 // semaphore for readers to wait for completing writers
readerCount int32 // number of pending readers
readerWait int32 // number of departing readers
}

是的,您可以说 8 个或 24 个字节无关紧要。只要您只有几个互斥量,它就不会。

但是将互斥锁放入它应该保护的结构(嵌入或常规的命名字段)中并不少见。现在,如果您拥有这些结构值的一部分,甚至可能有数千个,那么是的,它将产生显着的差异。

此外,如果您只需要一个互斥体,sync.Mutex 可以减少滥用它的机会(您不会意外调用 RLock(),因为它不会没有那个方法)。

关于go - 为什么存在 sync.Mutex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54982948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com