我想确切地知道当多个goroutins访问go地图时,假设我们有一个map[int]*User。多个goroutins修改User结构的字段会导致数据损坏吗?还是像len()非线程安全这样的操作,如果map在Go中是线程安全的,那会有什么不同?
map[int]*User
len()
同时修改*User可能会导致损坏, 而 与 无关map。只要不对映射进行任何修改,从映射中并发读取指针是安全的。修改数据*User点以不更改地图本身。
*User
map
同时修改map[int]*User本身也会冒数据损坏的风险。
没有良性数据竞争,请始终使用竞争检测器测试您的代码。