gpt4 book ai didi

hashmap - 戈朗 : Best way to read from a hashmap w/mutex

转载 作者:IT王子 更新时间:2023-10-29 01:34:09 26 4
gpt4 key购买 nike

这是这里的延续:Golang: Shared communication in async http server

假设我有一个带锁定的 HashMap :

//create async hashmap for inter request communication
type state struct {
*sync.Mutex // inherits locking methods
AsyncResponses map[string]string // map ids to values
}
var State = &state{&sync.Mutex{}, map[string]string{}}

写入这个的函数将放置一个锁。我的问题是,让另一个函数检查值而不阻止写入 HashMap 的最佳/最快方法是什么?我想知道它上面是否存在值。

MyVal = State.AsyncResponses[MyId]

最佳答案

在不阻塞作者的情况下读取共享 map 是数据竞争的定义。实际上,从语义上讲,这是一场数据竞争,即使写入者在读取期间被阻塞也是如此!因为一旦您完成读取值并取消阻止写入器 - map 中可能不再存在该值。

无论如何,正确的同步不太可能成为许多程序的瓶颈。 {RW,}Mutex 的非阻塞锁可能在 < 20 纳秒的数量级,即使在中等功率的 CPU 上也是如此。我建议不仅在使程序正确之后推迟优化,而且在测量大部分时间花费在何处之后。

关于hashmap - 戈朗 : Best way to read from a hashmap w/mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977647/

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