golang同步机制之通道

1.通道是什么

通道,在golang中的形式为类型为chan,是golang中同步的两个机制之一(另一个是WaitGroup)。

chan的语法形式如下:

ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType .
chan的类型可以是chan、chan<-、<-chan任意一种+数据类型(如int或者自定义类型)

2.通道的用法

1)创建chan

创建chan的方法如下:

c := make(chan int, 1)

make后面为缓冲数目,如果不加缓冲,则为无缓冲。

可以创建只有读或者写的chan,但这样的通道没有什么用,故在实践中不常存在。

2)读写chan

读写chan的符号为<-。读chan形式为 <-ch, 写chan形式为 ch<-。

缓冲数意味着读取或写入数目够了的话,将无法进行读取或写入。

没有缓冲的chan将会阻塞读或者写,直到有读或者写。

3)关闭chan

关闭chan的方法为close()。chan被关闭以后,并不马上消除空间(因为golang语言的)

4)无缓冲的chan与有缓冲的chan

就像上面的所说的,如果不加缓冲数目,则为无缓冲的chan;否则会生成一定缓冲数目。

没有缓冲的chan将会阻塞读或者写,直到有读或者写。

缓冲数目够了以后,chan也将不会读和写。

5)chan与select

chan可以与select一起用,用于并发控制。

select和chan的用法如下:

1)select会遍历所有case;

2)所有的case都会被求值或计算,求值或计算顺序:从左到右,从上到下;

3)如果chan没有阻塞,则随机执行一个case;

4)如果chan被阻塞,则直到一个chan不被阻塞才会执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值