小编Joh*_* D.的帖子

Golang映射对并发读/写操作有多安全?

根据Go博客,

映射对于并发使用是不安全的:它没有定义当您同时读取和写入时会发生什么.如果您需要从同时执行的goroutine中读取和写入映射,则访问必须由某种同步机制调解.(来源:https://blog.golang.org/go-maps-in-action)

任何人都可以详细说明这个吗?并发读取操作在例程中似乎是允许的,但是如果尝试读取和写入相同的键,则并发读/写操作可能会生成竞争条件.

在某些情况下可以降低最后的风险吗?例如:

  • 函数A生成k并设置m [k] = 0.这是A写入映射m的唯一时间.已知k不在m中.
  • A传递k到函数B并发运行
  • A然后读m [k].如果m [k] == 0,则它等待,仅在m [k]!= 0时继续
  • B在地图中寻找k.如果找到它,B将m [k]设置为某个正整数.如果不是,则等待直到k为m.

这不是代码(显然),但我认为它显示了一个案例的轮廓,即使A和B都试图访问m,也不会出现竞争条件,或者如果有的话也无关紧要因为额外的限制.

concurrency hashmap go

35
推荐指数
5
解决办法
5万
查看次数

标签 统计

concurrency ×1

go ×1

hashmap ×1