Golang基础篇-竞态
goroutine执行顺序 上一篇说到,goroutine是程序执行过程中的一个独立的单元,当程序中只有一个goroutine时,程序逻辑按照代码的顺序来执行,但是当程序中同时运行多个goroutine时, 逻辑的执行顺序是不确定的,比如下面的例子: func main() { for i := 0; i < 10; i++ { go display(i) } time.Sleep(time.Second) } func display(n int) { fmt.Printf("Number %d First\n", n) fmt.Printf("Number %d Second\n", n) } /*output: Number 9 First Number 6 First Number 5 First Number 5 Second Number 4 First Number 4 Second Number 0 First Number 0 Second Number 9 Second Number 8 First Number 8 Second Number 6 Second Number 3 First Number 3 Second Number 7 First Number 7 Second Number 2 First Number 2 Second Number 1 First Number 1 Second */ 上面的代码中,我们开启了10个goroutine,但是实际运行结果则是不同的goroutine穿插执行。如果这些goroutine之间没有关联,那么穿插执行并不会导致什么问题,但是如果它们之间有关联,比如需要访问同一块内存, 则程序的执行结果可能会依赖各个goroutine的执行顺序,这种情况称之为竞态。 ...