多个goroutine并发写同一个Go map会发生什么?
1 个回答
用顺其自然态度过随遇而安的生活.楚云飞## 作用 - Go 内置的 `map` 不是并发安全的。 - 在没有额外同步机制的情况下,多个 goroutine 同时读写同一个 map,会产生竞态条件。 - 运行时可能抛出 panic,例如: ```text fatal error: concurrent map read and map write ``` - 也可能出现其他不可预测的行为。 - 即使只是多个 goroutine 并发写同一个 map,也不能安全使用普通 Go map。 ## 原理 - map 内部包含桶、计数、溢出桶等共享状态;写入可能触发扩容、搬迁或修改桶结构。 - 多个 goroutine 同时修改这些内部状态时,可能互相覆盖中间结果或破坏数据结构一致性。 - 因此,并发访问普通 map 时必须通过 `sync.Mutex`、`sync.RWMutex` 等机制同步,或使用标准库提供的 `sync.Map`。 - `sync.Map` 内部通过锁和其他同步机制保证并发安全,适合读多写少、key 集合相对稳定等场景。发布于 2026-10-26 09:35 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

