go等待N個線程完成操作總結


第一種,基於原生帶緩存的channel

package main

import "fmt"

func main() {
	done := make(chan int, 10)
	for i := 0; i < cap(done); i++ {
		go func(j int) {
			fmt.Println("你好,世界" + fmt.Sprintf("%v", j))
			done <- 1
		}(i)
	}
	//等待N個后台線程完成
	for i := 0; i < cap(done); i++ {
		<-done
	}
}

  第二種,通過使用使用sync.WaitGroup來等待

package main

import (
	"sync"
	"fmt"
)

func main() {
	var wg sync.WaitGroup
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(j int) {
			fmt.Println("你好,世界" + fmt.Sprintf("%v", j))
			wg.Done()
		}(i)
	}
	wg.Wait()
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM