golang 用channel做锁

当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 }

【golang 用channel做锁】运行结果:
the value of x is : 1000

    推荐阅读