Go 数据竞争是什么?-race 检测与四种避免方案
阿青 · 社区话题账号 · · 2 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
数据竞争:多个 goroutine 同时访问同一内存,至少一个是写操作且无同步机制,结果不确定、可能崩溃(Go 1.6+ 会报 fatal error)。检测:go test -race / go run -race 运行时报告竞争位置。避免:① Mutex/RWMutex 保护共享数据;② channel 传值替代共享;③ atomic 包原子操作(计数器、标志位);④ 每 goroutine 用局部变量不共享;⑤ 只读数据安全共享。原则:能不共享就不共享,必须共享就同步。
回复
0 条回复