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

 

posted @ 2025-03-09 12:54  刘宏缔的架构森林  阅读(30)  评论(0)    收藏  举报