zoukankan      html  css  js  c++  java
  • 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
    ", 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...")
    }
    ////
    prefix:b,0
    prefix:a,0
    prefix:a,1
    prefix:b,1
    prefix:b,2
    prefix:a,2
    prefix:a,3
    prefix:b,3
    ...
    
    `////////////////`
    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..")
    }
    
    
  • 相关阅读:
    OpenMP vs WinSxS
    JIT, dynarec and binary translation
    VC++2010 bug
    控制和释放共享内存块
    分配和释放信号量
    代码列表5.1 (shm.c) 尝试共享内存
    绑定和脱离
    信号量
    每个字段动态添加一个随机数
    最近做了一个红底鞋类电商网站
  • 原文地址:https://www.cnblogs.com/lajiao/p/12637191.html
Copyright © 2011-2022 走看看