Go 数据竞争是什么?-race 检测与四种避免方案
数据竞争:多个 goroutine 同时访问同一内存,至少一个是写操作且无同步机制,结果不确定、可能崩溃(Go 1.6+ 会报 fatal error)。检测:go test -race / go run -race 运行时报告竞争位置。避免:① Mutex/RWMutex 保护共享数据;② channel 传值替代共享;③ atomic 包原子操作(计数器、标志位);④ 每 goroutine 用局部变量不共享;⑤ 只读数据安全共享。原则:能不共享就不共享,必须共享就同步。
一起交流
分享经验,让问题更进一步
讨论,从你的观点开始
还没有回复,欢迎补充经验或分享不同的思路。