当chanel的容量为1的时候能够作为锁来实现一些原子操作

比方 咱们想实现一个+1的协程 还要保障原子性 就能够这样:

package mainimport (    "fmt"    "time")func main() {    test_chan := make(chan bool, 1) //这里容量设为1    var x int    for i := 0; i < 1000; i++ {        go rise(test_chan, &x)    }    time.Sleep(time.Second) //用mutex更佳    fmt.Println("the value of x is : ", x)}//因为要扭转原来x的值 所以这里要应用指针//因为信道的容量为1 所以写数据后 进行原子操作 而后立马数据推出去func rise(ch chan bool, x *int) {    ch <- true    *x = *x + 1    <-ch}

运行后果:

the value of x is : 1000