贴一段demo代码,演示channel之间的同步

package main

import (
    "fmt"
    "time"
)

func deskGoRoutine(index int, userChannel chan string, deskChannel chan string) {
    for {
        fmt.Println("deskGoRoutine", index)

        select {
        case info := <-userChannel:
            if info == "userMsg" {
                fmt.Println(info)
                deskChannel <- "deskMsg"
            }
        case <-time.After(time.Second):
            fmt.Println("deskGoRoutine", index, "timeout,continue")
            continue
        }
        time.Sleep(time.Second)
    }
}

func userGoRoutine(index int, deskChannel chan string, userChannel chan string) {
    for {
        fmt.Println("userGoRoutine", index)

        select {
        case info := <-deskChannel:
            if info == "deskMsg" {
                fmt.Println(info)
                userChannel <- "userMsg"
            }
        case <-time.After(time.Second):
            fmt.Println("userGoRoutine", index, "timeout,continue")
            continue
        }
        time.Sleep(time.Second)
    }
}

func main() {

    userChannel := make(chan string)
    deskChannel := make(chan string)

    go userGoRoutine(0, deskChannel, userChannel)
    go deskGoRoutine(0, userChannel, deskChannel)

    userChannel <- "userMsg"

    select {}
}

一个gouRoutine对应一个channel,channel用来同步,如果不加timeout,那么goRoutine在收不到想要的channel数据的时候会死锁,只有加上timeout,才会不断的处理,满足我的需求

贴一段demo代码,演示channel之间的同步

时间: 2024-10-08 14:01:52

贴一段demo代码,演示channel之间的同步的相关文章

RAD Studio 10 自带Demo代码汇总说明

大家好,好多朋友来信咨询Delphi和C++Builder的移动开发.DataSnap架构等问题,希望能有Demo代码学习.其实Delphi和C++Builder本身自带有很多示例代码,已经覆盖了大部分Delphi和C++Builder开发工具的特性和技术.对于开发各种特定的应用,还是需要去在特定方向钻研该方面的技术的,不要指望一套Demo代码就可以代替自己的学习. 为了方便各位 Delphi 和 C++Builder开发者,有针对性的查找RAD Studio自带的示例代码,从而更快更有针对性的

javascript 压缩空格代码演示

      压缩空格代码演示 主要是讲解 压缩一个字符串两段空格          例如:javascript函数里的空格不论是这样     var s = "Hello World        ";                                  这样        var s = "       Hello World";                                   这样       var s = "   

SQL SERVER 2008 数据库隔离级别代码演示

SQL SERVER 2008 数据库隔离级别代码演示 ? 在各种SQL 的教程上一直都强调SQL SERVER 的4个隔离级别(其实这是SQL 工业标) 未提交读 ReadUncommited? 已提交读 ReadCommited? 不可重复读 RepeatableRead? 序列化 Serializable (为什么叫这个么名字?) 这4种隔离级别,本身没有优劣之分,完全取决于应用的场景. 本质上,他们是在 隔离性(紊乱程度) 和 灵活性(并发性) 之间博弈.简单的说,灵活性越高,隔离性越差

超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享

原创不易,转载请注明出处:超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 代码下载地址:http://www.zuidaima.com/share/1759689106541568.htm 依赖注入,DI(Dependency Injection),它的作用自然不必多说,提及DI容器,例如spring,picoContainer,EJB容器等等,近日,google诞生了更轻巧的DI容器--Guice! 废话不多讲了,先看看Guice是如何实现

现场代码演示软件&quot;Snippetty&quot;

Mac平台上有一款功能强大的现场代码演示软件"Snippetty".Snippetty Mac版在实时演示期间,只要您需要下一个演示代码块,就可以单击其托盘图标.你永远不会被卡住,你的演示总是像排练一样工作.有需要的朋友,点击进入这里,下载体验全部Snippetty Mac版功能! 部分功能 1.片段为MARKDOWN花时间准备您的演示作为降价脚本可以通过多种方式帮助您.首先,你有一份关于你将要做什么的书面记录,一旦你交付了演示 - 你做了什么.你有一些东西需要排练,如果你将来需要运行

BSS段、数据段、代码段、堆与栈

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. 代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区 域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读

nutch的爬虫demo代码 编辑

关键词: nutch今日来看看Nutch怎么Parse页面的: Nutch运用了两种Html parser东西(NekoHTML和TagSoup)来完成html的获取,这两种东西是可经过配置来选择的. 当然你要自己完成Parser你还能够选择HTMLParser[根据visitor访问者形式一起也供给了Event driver的接口]来 获取页面.假如你用惯了XML一套处置办法,运用NekoHTML和TagSoup应该会对比随手的. 咱们来看看类public class HtmlParser i

Supermap iClient 空间查询关联外表表查询多表字段示例代码

原创文章,转载请注明出处!http://blog.csdn.net/songhfu 空间查询关联属性表,并查询空间表和关联表字段示例代码如下: /* * 关联测试成功代码 * */ var joinItem=new SuperMap.REST.JoinItem({ foreignTableName: "V_ENABLEVIEW_LAND", joinFilter: "BBS_PARCEL.CADASTRALNO = V_ENABLEVIEW_LAND.CADASTRALNO

程序中的bss段,data段,代码段,堆,栈

程序中的bss段,data段,代码段(.text),堆(heap),栈(stack) .bss段:程序中未初始化的和已经初始化为0的全局变量和已经初始化为0的静态局部变量(static) .data段:程序中已经初始化的非零的全局变量和已经初始化的非零的静态局部变量(static) 代码段:用来存放代码的地方(.text段),不可修改,存放在只读区域内. 堆:程序员自己申请的内存区域,也就是用malloc()函数申请的内存区域,用free()函数来释放的区域. 栈:存放局部变量的区域,函数中的局