/**
* Created by Administrator on 13-12-9.
*/
package mainimport "fmt"
import "time"func main() {
closeChan := make(chan int, 3) go func() {
i := 0
var flag int = 0
go func() {
flag = <-closeChan
}()
for flag == 0 {i++
fmt.Println("goroutine 1", i)
time.Sleep(time.Second * 1)
}
}() go func() {
i := 0
var flag int = 0
go func() {
flag = <-closeChan
}()
for flag == 0 {i++
fmt.Println("goroutine 2", i)
time.Sleep(time.Second * 1)
}
}() go func() {
i := 0
var flag int = 0
go func() {
flag = <-closeChan
}()
for flag == 0 {i++
fmt.Println("goroutine 3", i)
time.Sleep(time.Second * 1)
}
}() time.Sleep(time.Second * 10)
closeChan <- 1 // 关闭1个 time.Sleep(time.Second * 10)
closeChan <- 1 // 关闭1个 time.Sleep(time.Second * 10)
closeChan <- 1 // 关闭1个 time.Sleep(time.Second * 30)
}
对一个管道的控制,达到控制多个goroutine的顺序关闭
/**
* Created by Administrator on 13-12-9.
*/
package mainimport "fmt"
import "time"func main() {
closeChan := make(chan int, 3) go func() {
i := 0
flag := true
go func() {
<-closeChan
flag = false
}()
for flag {i++
fmt.Println("goroutine 1", i)
time.Sleep(time.Second * 1)
}
}() go func() {
i := 0
flag := true
go func() {
<-closeChan
flag = false
}()
for flag {i++
fmt.Println("goroutine 2", i)
time.Sleep(time.Second * 1)
}
}() go func() {
i := 0
flag := true
go func() {
<-closeChan
flag = false
}()
for flag {i++
fmt.Println("goroutine 3", i)
time.Sleep(time.Second * 1)
}
}() time.Sleep(time.Second * 30)
close(closeChan)
time.Sleep(time.Second * 30)
}
对一个管道的控制,达到控制多个goroutine的一并关闭
【通过chan控制多个goroutine】
推荐阅读
- 【golang】leetcode中级-字母异位词分组&无重复字符的最长子串
- 彻底理解Golang Map
- kratos线上开源年会它来啦~
- 深入浅出 Golang 资源嵌入方案(go-bindata篇)
- 深入浅出 Golang 资源嵌入方案(前篇)
- golang 经典案例总结
- Go实战 | 基于有向无环图的并发执行流的实现
- Golang 数组和切片
- Go JSON编码与解码()
- golang map基础知识