[英]Trying to reproduce data race in Golang 1.8.3
我尝试在我的应用程序中重现竞争状况,但是即使在带有Linux的虚拟机上, go build -race
显示任何错误。
机:
Windows:4核
Linux:2个核心(通过Vagrant和VirtualBox的Ubuntu Xenial x64)
转到版本:
Linux: go version go1.8.3 linux/amd64
Windows: go version go1.8.3 windows/amd64
去env:
Linux: https : //pastebin.com/pXURKfj3
Windows: https : //pastebin.com/MTdjNnVW
范例1: https : //play.golang.org/p/x-eD6bBrzz
示例2: https : //play.golang.org/p/FSg8P7UP8p
我的例子有数据竞赛吗? 两者都不符合go build -race
如果上面的示例没有数据争用条件,是否可以有人给我发送示例,让我可以在Golang中看到真实的数据争用,因此我可以测试-race标志? 我还在网上找到了一些示例,其中一些没有编译,其中一些同样表明没有数据争用。
谢谢!
您的两个示例都存在数据争用问题。 您可以通过以下方式找出数据竞争。
go run -race program.go
go test -race <package-name>
或go test -race -run=<testcase-func-name>
go build -race program.go
然后执行程序 go install -race <package-name>
然后执行程序 示例1:数据竞赛信息
$ go build -race datarace-try1.go
$ ./datarace-try1
8
==================
WARNING: DATA RACE
Read at 0x00c4200761a8 by goroutine 7:
main.main.func1()
/Users/jeeva/go_playground/datarace-try1.go:23 +0x74
Previous write at 0x00c4200761a8 by goroutine 6:
main.main.func1()
/Users/jeeva/go_playground/datarace-try1.go:23 +0x8d
Goroutine 7 (running) created at:
main.main()
/Users/jeeva/go_playground/datarace-try1.go:25 +0xee
Goroutine 6 (running) created at:
main.main()
/Users/jeeva/go_playground/datarace-try1.go:25 +0xee
==================
187410
Found 1 data race(s)
示例2:数据竞赛信息
$ go build -race datarace-try2.go
$ ./datarace-try2
==================
WARNING: DATA RACE
Read at 0x00c420078178 by main goroutine:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:10 +0x12e
Previous write at 0x00c420078178 by goroutine 6:
main.main.func1()
/Users/jeeva/go_playground/datarace-try2.go:15 +0xd4
Goroutine 6 (finished) created at:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:17 +0xf1
==================
==================
WARNING: DATA RACE
Read at 0x00c420078178 by goroutine 7:
main.main.func2()
/Users/jeeva/go_playground/datarace-try2.go:20 +0x3f
Previous write at 0x00c420078178 by goroutine 6:
main.main.func1()
/Users/jeeva/go_playground/datarace-try2.go:15 +0xd4
Goroutine 7 (running) created at:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:23 +0x11d
Goroutine 6 (finished) created at:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:17 +0xf1
==================
finish
Found 2 data race(s)
exit status 66
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.