繁体   English   中英

尝试在Golang 1.8.3中重现数据竞赛

[英]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标志? 我还在网上找到了一些示例,其中一些没有编译,其中一些同样表明没有数据争用。

谢谢!

您的两个示例都存在数据争用问题。 您可以通过以下方式找出数据竞争。

  1. go run -race program.go
  2. go test -race <package-name>go test -race -run=<testcase-func-name>
  3. go build -race program.go然后执行程序
  4. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM