将标准Golang地图转换为Sync.Map以避免出现竞争情况

我有以下代码行:

var a_map = make(map[string] []int)

我的代码的一部分(利用a_map变量)偶尔会引发以下错误:

fatal error: concurrent map read and map write

为了尝试创建一种更强大的解决方案(该解决方案没有此类错误),我想使用sync.Map而不是通用映射。提供此堆栈溢出question的唯一答案使我受到启发。但是,我不清楚这样做的正确语法。

我第一次尝试使用以下代码行:

var a_map = make(sync.Map[string] []int)

这导致了以下错误:

...syntax error: unexpected ],expecting expression

然后我尝试:

 sync_map := new(sync.Map)
 var a_map = make(sync_map[string] []int)

哪个导致了相同的错误:

...syntax error: unexpected ],expecting expression
web335 回答:将标准Golang地图转换为Sync.Map以避免出现竞争情况

sync.Map不是Go map,因此您不能使用a_map["key"]语法。相反,它是struct,其中的方法提供了常规的映射操作。使用它的语法是:

var m sync.Map
m.Store("example",[]int{1,2,3})
fmt.Println(m.Load("example")) // [1 2 3] true

-https://play.golang.org/p/7rbEG_x0mrC

根据并发的来源,您可能需要在每个键下对[] int值进行类似的同步,而sync.Map不会给您同步。 sync.Map仅提供每个键的加载/存储同步。如果需要,请发表评论,我们会尽力帮助您。

本文链接:https://www.f2er.com/2938160.html

大家都在问