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

该博客展示了使用Go语言的channel避免竞态问题的代码示例。定义了变量和等待组,创建了通道,通过通道的读写操作实现数据的传递和递增,利用goroutine并发执行递增函数,最后输出结果,避免了竞态问题。
 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 }

 

转载于:https://www.cnblogs.com/shi2310/p/10928890.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值