通过chan控制多个goroutine

/** * 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】



    推荐阅读