首页 > 其他 > 详细

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

时间:2014-07-16 19:32:25      阅读:361      评论:0      收藏:0      [点我收藏+]
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之间的同步,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/ziyouchutuwenwu/p/3837424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!