一尘不染

Go中的地图不具有线程安全性意味着什么?

go

我想确切地知道当多个goroutins访问go地图时,假设我们有一个map[int]*User。多个goroutins修改User结构的字段会导致数据损坏吗?还是像len()非线程安全这样的操作,如果map在Go中是线程安全的,那会有什么不同?


阅读 260

收藏
2020-07-02

共1个答案

一尘不染

同时修改*User可能会导致损坏,
无关map。只要不对映射进行任何修改,从映射中并发读取指针是安全的。修改数据*User点以不更改地图本身。

同时修改map[int]*User本身也会冒数据损坏的风险。

没有良性数据竞争,请始终使用竞争检测器测试您的代码。

2020-07-02