Go 并发 | 数据竞争及竞争条件
Go 并发中有两个重要的概念:数据竞争 (data race) 和竞争条件 (race condition)
在并发程序中,竞争问题可能是程序面临的最难也是最不容易发现的错误之一
数据竞争 (data race)
当两个或多个协程同时访问同一个内存地址,并且至少有一个是在写时,就会发生数据竞争,看一下以下例子
i := 0
go func() {
i++
}()
go func() {
i++
}()
当运行 go run -race main.go
,会输出下面提示表明发生了数据竞争:
==================
WARNING: DATA RACE
Write at 0x00c00008e000 by goroutine 7:
main.main.func2()
Previous write at 0x00c00008e000 by goroutine 6:
main.main.func1()
====&