wg sync.WaitGroup执行顺序



func main1(){
	//runtime.GOMAXPROCS(1)
	for i :=0 ; i<10 ;i++{
		go fmt.Println(i)  //启动10个goroutine 来计算
	}
	time.Sleep(1*time.Second)
}

func main(){
	/// wg sync.WaitGroup执行顺序是最后一个先执行,以下结果为e,a,b,c,d
	//不使用wg时结果为a,b,c,d,e
	var wg sync.WaitGroup
	wg.Add(5)
	go func() {

		fmt.Println("a")
		wg.Done()
	}()
	go func() {
		defer wg.Done()
		fmt.Println("b")
	}()
	go func() {
		defer wg.Done()
		fmt.Println("c")
	}()
	go func() {
		defer wg.Done()
		fmt.Println("d")
	}()
	go func() {
		defer wg.Done()
		fmt.Println("e")
	}()
	//wg.Wait()
	//time.Sleep(1*time.Second)
	wg.Wait()

}

// 例子3
func cal(pre string, wg *sync.WaitGroup){
	defer wg.Done()
	for i:=0;i<10 ;i++  {
		fmt.Printf("prefix:%s,%d\n", pre, i)
		time.Sleep(1*time.Second)
	}
}
func main(){
	runtime.GOMAXPROCS(1)
	var wg sync.WaitGroup
	wg.Add(2)
	go cal("a", &wg)
	go cal("b", &wg)
	wg.Wait()
	fmt.Println("end...")
}


`////////////////`
func st(){
	ch := make(chan int, 10)
	ch <- 3
	close(ch)
	//data := <- ch
	//fmt.Println(data)
	fmt.Println("ssssssss")
	//for d := range ch{
	//	fmt.Println(d)
	//}
	//return
	for {
		data := <- ch
		fmt.Println(data)
		time.Sleep(1*time.Second)
	}
	//limiter := time.Tick(time.Second*1)
	return
	//var sx rune
	//sx = 'd'
	fmt.Println("start..")
	var wg sync.WaitGroup
	wg.Add(2)
	go func() {
		defer wg.Done()
		for count :=0; count <3;count++  {
			for a :='a'; a< 'a' + 26;a++{
				fmt.Printf("%c", a)
			}

			fmt.Println()
		}
	}()
	fmt.Println("middle..")
	go func() {
		defer wg.Done()
		for count:=0;count<3;count++{
			for a:='A';a<'A'+26;a++{
				fmt.Printf("%c", a)
			}
			fmt.Println()
			time.Sleep(1*time.Second)
		}
	}()
	wg.Wait()
	fmt.Println("END..")
}

猜你喜欢

转载自www.cnblogs.com/lajiao/p/12637191.html