从名字上就能看出来了,表示是否启用数据竞争检测。 go 的 build 和 run 命令支持选项 -race。如果启用该选项,发现存在数据竞态就会报警。-race 在源码中对应的变量是 raceenabled,当启用 -race, raceenabled 就是 true。 你可以看看 map 的源码,位置在 src/runtime/map.go,在访问 map 时,有很多关于 raceenabled 是否启用的判断,比如 mapaccess1 函数。 if raceenabled && h != nil { callerpc := getcallerpc() pc := funcPC(mapaccess1) racereadpc(unsafe.Pointer(h), callerpc, pc) raceReadObjectPC(t.key, key, callerpc, pc) } 关于 race 检测的一些函数是由汇编实现的,比如 x86_64 架构的相关函数在 race_amd64.s 文件中。 贴两个我写的和 race 相关的文章和回答。一篇官方的译文 Go 竞态检测器 和一篇关于竞态条件导致的 fatal error 的提问,回答地址。
从名字上就能看出来了,表示是否启用数据竞争检测。
go 的 build 和 run 命令支持选项 -race。如果启用该选项,发现存在数据竞态就会报警。-race 在源码中对应的变量是 raceenabled,当启用 -race, raceenabled 就是 true。
你可以看看 map 的源码,位置在 src/runtime/map.go,在访问 map 时,有很多关于 raceenabled 是否启用的判断,比如 mapaccess1 函数。
关于 race 检测的一些函数是由汇编实现的,比如 x86_64 架构的相关函数在 race_amd64.s 文件中。
贴两个我写的和 race 相关的文章和回答。一篇官方的译文 Go 竞态检测器 和一篇关于竞态条件导致的 fatal error 的提问,回答地址。