一,怎么用channel实现锁定?
只有1个缓冲区的channel,
写入数据类似于加锁,
读出数据类似于释放锁
二,代码例子:
// 入口函数
func main() {//创建channel对象ch:=make(chan int,1)//协程1go func() {ch <- 0 for i:=1; i<=5; i++ {time.Sleep(time.Millisecond)fmt.Println(i)}<-ch}()//协程2go func() {ch <- 0for 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