• Golang等待一组协程结束


    1. 利用waitgroup 

    import (
    	"log"
    	"sync"
    	"sync/atomic"
    	"time"
    )
    func main() {
    	wg := sync.WaitGroup{}
    	for i := 0; i < 10; i++ {
    		wg.Add(1)
    		go func(i int) {
    			log.Println(i)
    			wg.Done()
    		}(i)
    	}
    	wg.Wait()
    }

    2. 利用缓冲channel

    import (
    	"log"
    	"time"
    )
    
    func main() {
    	ch := make(chan struct{}, 10)
    	var i int
    	for i = 0; i < 10; i++ {
    		go func(i int) {
    			log.Println(i)
    			ch <- struct{}{}
    		}(i)
    	}
    
    	for j := i; j > 0; j-- {
    		<-ch
    	}
    }

    3. 利用非缓冲channel

    package main
    
    import (
       "log"
       "time"
    )
    
    func main() {
       ch := make(chan struct{})
       for i := 0; i < 10; i++ {
          go func(i int) {
             log.Println(i)
             ch <- struct{}{}
          }(i)
          <-ch
       }
    }
    

      

    4. 利用原子计数器

    package main
    
    import (
       "log"
       "time"
       "sync"
       "sync/atomic"
    )
    
    func main() {
       var total int32
       for  i := 0; i < 10; i++ {
          go func(i int) {
             log.Println(i)
             atomic.AddInt32(&total,1)
          }(i)
       }
       for atomic.LoadInt32(&total) < 10 {
          time.Sleep(time.Microsecond)
       }
    }
    

      

      

      

  • 相关阅读:
    NOIP simulation
    NOIP2013
    BZOJ 4176 Lucas的数论
    BZOJ 3512 DZY Loves Math IV
    BZOJ 3994 Sum
    BZOJ 4174 tty的求助
    BZOJ 3561 DZY Loves Math VI
    BZOJ 2508 简单题/BZOJ 3775 点和直线
    FTR #1 百步穿杨
    BZOJ 4407 于神之怒加强版
  • 原文地址:https://www.cnblogs.com/tl542475736/p/11833384.html
Copyright © 2020-2023  润新知