阻塞channel优先返回给主线程

昨天在别人发了个用golang的channel写菲波拉契数列的代码,说是有问题,然后我试着撸一个,结果发现管道阻塞状态下的一个trap,就是当主线程和子线程同时阻塞一个管道时,当管道有了数据是优先返回给主线程的.测试代码如下:

package main

import (
    ."fmt"
)

func fbi(num int,ch chan int){
    if num<3 {
        ch<-num;
    }else{
        /*
        cl:=make(chan int);
        go fbi(num-2,cl);
        tmp:=<-cl;
        cr:=make(chan int);
        go fbi(num-1,cr);
        tmp+=<-cr;
        ch<-tmp;
        */
        go fbi(num-2,ch);
        r:=<-ch;
        Println("in go");
        go fbi(num-1,ch);
        l:=<-ch;
        ch<- (l+r);
    }
}

func main(){
    ch:=make(chan int);
    go fbi(10,ch);
    Println(<-ch);
    Println("in main go");
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2506
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2000
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4808
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2667
来自专栏魂祭心

原 canvas绘制clock

4024
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2112
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6638
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏落花落雨不落叶

canvas画简单电路图

59011

扫码关注云+社区