学习Go语言之使用channel避免竞态问题

 1 // 使用channel避免竞态问题
 2 package main
 3 
 4 import (
 5     "fmt"
 6     "sync"
 7 )
 8 
 9 var (
10     i  int
11     wg sync.WaitGroup
12 )
13 
14 func AutoIncrease(ch chan int) {
15     defer wg.Done()
16     i = <-ch
17     i++
18     ch <- i
19 }
20 
21 func main() {
22     //通道读写时会阻塞
23     ch := make(chan int, 10)
24     ch <- 0
25     for k := 0; k < 10; k++ {
26         wg.Add(1)
27         go AutoIncrease(ch)
28     }
29     wg.Wait()
30     //此时channel中的值和i一样
31     // i := <-ch
32     fmt.Println(i)
33 }

猜你喜欢

转载自www.cnblogs.com/shi2310/p/10928890.html