go并发:用channel实现锁定
一,怎么用channel实现锁定?
只有1个缓冲区的channel,
写入数据类似于加锁,
读出数据类似于释放锁
二,代码例子:
// 入口函数
func main() {
//创建channel对象
ch:=make(chan int,1)
//协程1
go func() {
ch <- 0
for i:=1; i<=5; i++ {
time.Sleep(time.Millisecond)
fmt.Println(i)
}
<-ch
}()
//协程2
go func() {
ch <- 0
for i:=1; i<=5; i++ {
time.Sleep(time.Millisecond)
fmt.Println(i*10)
}
<-ch
}()
time.Sleep(time.Second)
}
三,测试效果:
加锁情况
$ go run main.go
10
20
30
40
50
1
2
3
4
5
不加锁时:
$ go run main.go
1
10
20
2
3
30
40
4
5
50
浙公网安备 33010602011771号