栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

详解go报错fatal error: concurrent map iteration and map write

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

详解go报错fatal error: concurrent map iteration and map write

纯干货哦。

直接原因:并发读/写map时造成的问题。你的问题源头必然在下面几个原因之列。

目录

原因1:加解锁异常

原因2:加解锁代码看起来貌似正常

原因3:锁未加完全

原因4:对该map加的不是同一把锁


相似的报错:fatal error: concurrent map writes

原因1:加解锁异常

代码写的不严谨,加锁后未解锁,未形成单次闭环
解决:形成闭环,有加得必须有解

原因2:加解锁代码看起来貌似正常

实际上是加锁内部的代码加了个寂寞,map操作不在锁的范围内,和外部的代码在使用的
(共同读写的)还是相同的map(同地址),锁未起实际作用

解决:对map数据进行转移不使用旧map,在加锁与解锁之间生成新的map,
将数据转移至新map(或其它数据结构)再返回新map

或

调整代码位置即可

原因3:锁未加完全


只给写map的goroutine实施了加解锁,而读goroutine方面没有;
或
只给读map的goroutine实施了加解锁,而写goroutine方面没有;
或
未加锁

原因4:对该map加的不是同一把锁


举例:对于某map,读map有2个goroutine,写map有2个goroutine,这四个依次编号为1,2,3,4,前3个使用mu1,最后一个使用mu2,就会造成该报错。


温馨提示:
同一把锁可以作用多个map,但同一个map不能有两把锁操作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/904690.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号