go协程实例-1

package main

import (
	"fmt"
)

func main() {
	c:=make(chan int)
	go print(c)
	c<-1
	c<-2
	//保障协程运行完毕,主协程main运行结束之后,其他协程也全部结束
	//time.Sleep(time.Duration(time.Second*5))

}
func print(c chan int){
	for{
				fmt.Println("============")
		fmt.Println(<-c)
	}
}

输出结果有两种:

============
1
============
2
============
============
1
============

产生不同输出结果的原因是,main生成的协程一直循环去信道c里面的数据,可能在循环取数过程中,main协程结束,此时,由main生成的协程也全部结束。如果想让print协程全部结束,可以执行

time.Sleep(time.Duration(time.Second*5))

,让main协程暂停5秒,输出结果为:

============
1
============
2
============

这是因为print协程在输出1,2后,再次准备从信道内取数,但是此时已经没有向信道内发送数据的操作,所以此时产生了阻塞,阻塞5秒后,main协程结束,全部协程结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值