博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
go:channel(未完)
阅读量:5244 次
发布时间:2019-06-14

本文共 905 字,大约阅读时间需要 3 分钟。

:1)以下的所有讨论建立在包含整形元素的通道类型之上,即 chan int

  2)对于“<-”我的理解是,它可能是一个操作符(接收操作符),也

     可能是类型的一部分(如“chan<- int”表示包含整形元素的发送通道类型

 

带缓冲和不带缓存的channel

1.带缓冲:ch:=make(chan int,1)

  1)goruntine A 中包含语句 ch<-1:表示向ch发送1,若此时ch中已经有一个数据,则A阻塞在此处,直到ch中的数据被取走;

  2)goruntine A 中包含语句  <-ch:表示从ch中接收一个数据,若此时ch中无数据,则A阻塞在此处,直到有数据传入ch;  

  3)假设ch:=make(chan int,100),for i := range ch {

...}通过range 在遍历 ch 的时候需要注意:

      a. range循环接收ch,直到close(ch),如果没有数据,将阻塞在此处。
      b. 当close(ch)运行后,不可向ch发送数据,但仍然可以接收ch剩余数据,直到ch中数据为空,这时range语句将结束而非阻塞。   

2.不带缓冲:ch:=make(chan int),此时的ch只作数据传递的作用,不能存储数据(因为它没buffer)。

  1)goruntine A 包含 ch<-1:运行到此处A立即阻塞,除非另一个goruntine B 正在执行 ch<-

    换个说法:A欲向ch发送数据,仅当B做好了从ch接收数据的准备;

  2)同理,goruntine A 包含 <-ch。A欲从ch接收一个数据,仅当B做好了向ch发送数据的准备。

  

类型转换:一定注意chan int是一个整体

     <-chan int(v):将v转换为一个通道类型,再从该通道接收一个值(此时“<-”是一个操作符)

  (<-chan int)(v):将v转换为一个接收通道类型(此时“<-”是类型的一部分)

转载于:https://www.cnblogs.com/xiaopipi/p/4951243.html

你可能感兴趣的文章
数据结构05之高级排序
查看>>
python 字典实现类似c的switch case
查看>>
面试问题总结
查看>>
ubuntu qq
查看>>
redis 常用命令
查看>>
【转载】C#常用数据库Sqlserver通过SQL语句查询数据库以及表的大小
查看>>
_kbhit() for linux
查看>>
Mayor's posters POJ - 2528
查看>>
决策树--信息增益,信息增益比,Geni指数的理解
查看>>
常用sql备份
查看>>
Solr源码在MyEclipse下的搭建
查看>>
Oracle用户管理的不完全恢复2:基于取消的恢复
查看>>
Oracle 11g 执行计划管理2
查看>>
stm32 nucleo系列开发板的接口
查看>>
02-CSS基础与进阶-day6_2018-09-05-21-42-09
查看>>
JQuery 多选按钮checkbox
查看>>
PHP 语法(5)
查看>>
java反射简解
查看>>
Socket,webservices,remoting,WCF
查看>>
SQL---mysql新增字段
查看>>