Golang:从具有mutex的hashmap读取的最佳方式

时间:2013-07-31 18:03:16

标签: hashmap go mutex

这是此处的延续: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]

1 个答案:

答案 0 :(得分:5)

在不阻塞编写器的情况下读取共享地图是数据竞争的定义。实际上,在语义上它是一个数据竞争,即使在读取期间编写器将被阻止!因为只要您完成读取值并取消阻止编写者 - 该值可能不再存在于地图中。

无论如何,正确的同步不太可能成为许多程序的瓶颈。 {RW,} Mutex的非阻塞锁定可能是<甚至在中等功率的CPUS上也只有20秒。我建议不仅在使程序正确之后推迟优化,而且在测量之后推迟优化,其中主要部分时间花费。

相关问题