内容简介:Golang中我们使用Channel或者sync.Mutex等锁保护数据,有没有一种机制可以检测代码中的数据竞争呢?数据竞争是并发情况下,存在多线程/协程读写相同数据的情况,必须存在至少一方写。另外,全是读的情况下是不存在数据竞争的。
Golang中我们使用Channel或者sync.Mutex等锁保护数据,有没有一种机制可以检测代码中的数据竞争呢?
数据竞争是并发情况下,存在多线程/协程读写相同数据的情况,必须存在至少一方写。另外,全是读的情况下是不存在数据竞争的。
使用race检测数据竞争
go build
有个标记 race
可以帮助检测代码中的数据竞争。
➜ awesome git:(master) ✗ go help build
//.... omit
-race
enable data race detection.
Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
下面举个栗子:
package main
import "fmt"
func main() {
i := 0
go func() {
i++ // write i
}()
fmt.Println(i) // read i
}
测试方法:
➜ awesome git:(master) ✗ go build -race hi.go
➜ awesome git:(master) ✗ ./hi
0
==================
WARNING: DATA RACE
Write at 0x00c00009c008 by goroutine 6:
main.main.func1()
/Users/mac/go/src/github.com/mac/awesome/hi.go:9 +0x4e
Previous read at 0x00c00009c008 by main goroutine:
main.main()
/Users/mac/go/src/github.com/mac/awesome/hi.go:12 +0x88
Goroutine 6 (running) created at:
main.main()
/Users/mac/go/src/github.com/mac/awesome/hi.go:8 +0x7a
==================
Found 1 data race(s)
exit status 66
提示示例代码存在1处数据竞争,说明了数据会在第9行写,并且同时会在12行读形成了数据竞争。
当然你也可以使用 go run
一步到位:
➜ awesome git:(master) ✗ go run -race hi.go
0
==================
WARNING: DATA RACE
Write at 0x00c000094008 by goroutine 6:
main.main.func1()
/Users/shitaibin/go/src/github.com/shitaibin/awesome/hi.go:9 +0x4e
Previous read at 0x00c000094008 by main goroutine:
main.main()
/Users/shitaibin/go/src/github.com/shitaibin/awesome/hi.go:12 +0x88
Goroutine 6 (running) created at:
main.main()
/Users/shitaibin/go/src/github.com/shitaibin/awesome/hi.go:8 +0x7a
==================
Found 1 data race(s)
exit status 66
如果这篇文章对你有帮助,请点个赞/喜欢,让我知道我的写作是有价值的,感谢。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 恶意软件如何绕过AMSI检测以逃避检测
- 行人检测新思路:高级语义特征检测取得精度新突破
- NIC:基于神经网络不变量检测的对抗样本检测
- 智能威胁检测:基于 Spark 的 SOC 机器学习检测平台
- Java并发系列—并发编程基础
- CVPR 2019 | CSP行人检测:无锚点框的检测新思路
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beginning iPhone and iPad Web Apps
Chris Apers、Daniel Paterson / Apress / 2010-12-15 / USD 39.99
It seems that everyone and her sister has developed an iPhone App—everyone except you, the hard-working web professional. And now with the introduction of the iPad, you may even feel farther behind. B......一起来看看 《Beginning iPhone and iPad Web Apps》 这本书的介绍吧!