如下代码:

package mainimport ("fmt""sync"
)var wg sync.WaitGroupfunc consumer(queue chan int) {defer wg.Done()data := <-queue //将箭头右边的值放在左边fmt.Println(data)
}func main() {/**channel提供了一种通信机制,定向发消息*///定义一个channelvar msg1 chan int//初始化这个channelmsg1 = make(chan int)msg1 = make(chan int, 1)//所以综合可以得知,在go语言中使用make初始化的有三种,第一种:slice 第二种:map 第三种: channel//初始化这个channel有两种方法:第一种:make,无缓冲的 第二种方法:有缓冲空间msg1 <- 1wg.Add(1)go consumer(msg1)wg.Wait()var num = 10var msg chan intvar a *int = &numif msg == nil {fmt.Println("hello")}fmt.Println(*a)}

二:如何关闭channel,我们想channel中存数据的时候,可能只想存两个。但是如果我们在consumer中不去关闭的话,就会造成死锁。如下代码,以及解决方法

package mainimport ("fmt""sync"
)var wg sync.WaitGroupfunc consumer(queue chan int) {defer wg.Done()for data := range queue {fmt.Println(data)}//data := <-queue //将箭头右边的值放在左边
}func main() {/**channel提供了一种通信机制,定向发消息*///定义一个channelvar msg1 chan int//初始化这个channelmsg1 = make(chan int)msg1 = make(chan int, 1)//所以综合可以得知,在go语言中使用make初始化的有三种,第一种:slice 第二种:map 第三种: channel//初始化这个channel有两种方法:第一种:make,无缓冲的 第二种方法:有缓冲空间msg1 <- 1wg.Add(1)go consumer(msg1)msg1 <- 2//关闭channelclose(msg1) //1.已经关闭的channel不能再发数据了 2.已经关闭的channel消费者还能再读取数据吗,以及关闭的channel还嫩继续取数据,直到数据取完为止wg.Wait()var num = 10var msg chan intvar a *int = &numif msg == nil {fmt.Println("hello")}fmt.Println(*a)}

通过channel进行goroutine间的通信相关推荐

  1. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  2. 同步线程和进程间的通信

    最近回去学习了一下进程和进程间的通信,有时候很多东西久不看了也就一下子忘了== 这里面有好几个互斥对象使用线程的 1 void mListText(CString str) 2 { 3 m_list_ ...

  3. Java 多线程(七) 线程间的通信

    Java 多线程(七) 线程间的通信--wait及notify方法 线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法 ...

  4. Android开发之Service通过Messenger实现线程间的通信

    Messenger信使其实在真正使用中用到的并不多,但是面试的时候考官还是十分想要考察一下你的基本功的.那我们现在先来看一下Messenger的使用场景.如果你需要你的Service与远程线程通信,那 ...

  5. 线程间的通信 共享数据安全问题

    1 //线程间的通信:线程的任务不同,但是线程操作的数据相同. 2 3 //描述数据 4 class Resource 5 { 6 public String name; 7 public Strin ...

  6. java http连接_Java中通过方法创建一个http连接并请求(服务器间进行通信)

    服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值. 1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package dem ...

  7. Android 使用AIDL实现进程间的通信

    在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AIDL(android Interface Definition Language)是一种接口定义语言,编译器通 ...

  8. 三层交换机解决不同VLAN间的通信—Vecloud微云

    交换机的转发过程 交换机工作于OSI参考模型的第二层,即数据链路层.交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表.交换机根据MAC地址表转发数据. 路由器的转 ...

  9. 高并发编程-使用wait和notifyAll进行线程间的通信3_多线程下的生产者消费者模型和notifyAll

    文章目录 概述 解决办法 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析 中分析了假死的原因,这里我们来看下改如何解决在多线程下出现的这 ...

最新文章

  1. 杭电oj1087最长递增子序列java实现
  2. sql 倒数第二个_小白初探SQL(一)
  3. android系统相机自动录像,android 调用系统相机录像并保存
  4. VMware 安装kali——linux
  5. MacFetionV0.8.0测试版
  6. 信息学奥赛一本通 1050:骑车与走路 | OpenJudge NOI 1.4 12
  7. python 实现本地查找文件,并打印(os for os.open chdir)
  8. 一个女人如何让自已越来越厉害
  9. [RK3399][Android7.1] Pinctrl的默认配置
  10. mysql游戏调整等级_mysql求游戏排名
  11. 代码审计 企业级Web代码安全架构 完整版pdf
  12. Windows10禁用Adobe Creative Cloud开机自启动
  13. 魅族一直显示无服务器,魅族手机用久了卡顿,这三个方法轻松解决
  14. 曹鹏CSS视频教程 编程之邦
  15. Deepgreen/Greenplum 删除节点步骤
  16. 一招学会绘制UI图标超椭圆
  17. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之部署到Linux
  18. 计算机子网掩码作用,什么是子网掩码?子网掩码的作用是什么?
  19. 解决Creo8.0许可证无效的问题
  20. IT大学生成长周报 | 第 7 期

热门文章

  1. 学习进度表(160519更新)
  2. Effective c++ 9 53...55
  3. 常见设计模式描术(看完就把它忘记~~)
  4. pyltp实体识别_哈工大 PYLTP 安装 排坑指南
  5. Python之网络爬虫(Xpath语法、Scrapy框架的认识)
  6. ‘cross-env‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  7. Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—nrm的安装与配置(5)
  8. Python批量修改Word文档中特定关键字的颜色
  9. 微课|玩转Python轻松过二级(2.2.1节):算术运算符
  10. Python线性代数扩展库numpy.linalg中几个常用函数