将标准Golang映射转换为Sync.Map以避免出现竞争状况

问题描述 投票:0回答:1

我有以下代码行:

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
go thread-safety mutex race-condition goroutine
1个回答
0
投票

sync.Map不是Go sync.Map,因此不能将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

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

© www.soinside.com 2019 - 2024. All rights reserved.