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协程结束,全部协程结束。

猜你喜欢

转载自blog.csdn.net/qq_20867981/article/details/86699018