C/C++教程

chan应用:

本文主要是介绍chan应用:,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

go实现主线程等待子线程都运行完再退出

方式1:

package main
import (
	"fmt"
)
func main() {
	ch := make(chan struct{})
	count := 2 // count 表示活动的协程个数
	go func() {
		fmt.Println("Goroutine 1")
		ch <- struct{}{} // 协程结束,发出信号
	}()
	go func() {
		fmt.Println("Goroutine 2")
		ch <- struct{}{} // 协程结束,发出信号
	}()
	for range ch {
		// 每次从ch中接收数据,表明一个活动的协程结束
		count--
		// 当所有活动的协程都结束时,关闭管道
		if count == 0 {
			close(ch)
		}
	}
}

方式2:

package main
 import (
   "fmt"
  "sync"
 )
 func main() {
  var wg sync.WaitGroup
  wg.Add(2) // 因为有两个动作,所以增加2个计数
  go func() {
    fmt.Println("Goroutine 1")
    wg.Done() // 操作完成,减少一个计数
  }()
  go func() {
    fmt.Println("Goroutine 2")
    wg.Done() // 操作完成,减少一个计数
  }()
  wg.Wait() // 等待,直到计数为0
}

 

这篇关于chan应用:的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!