简单实用:Go WaitGroup的应用实例分享

1317
2023/11/2 16:41:12
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

WaitGroup是Go语言中的一个同步原语,用于等待一组goroutine的完成。

下面是一个简单的应用实例,演示了如何使用WaitGroup等待一组goroutine的完成:

package main
import (
"fmt"
"sync"
"time"
)
// 模拟耗时操作,每个goroutine等待一秒钟
func doSomething(i int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("Goroutine %d start\n", i)
time.Sleep(time.Second)
fmt.Printf("Goroutine %d done\n", i)
}
func main() {
var wg sync.WaitGroup
// 启动5个goroutine
for i := 0; i < 5; i++ {
wg.Add(1)
go doSomething(i, &wg)
}
// 等待所有goroutine完成
wg.Wait()
fmt.Println("All goroutines done")
}

在上面的例子中,我们定义了一个doSomething函数来模拟耗时的操作。在main函数中,我们创建了一个WaitGroup,并在启动每个goroutine之前调用Add方法来增加计数器。

然后,每个goroutine执行doSomething函数,并在完成后调用Done方法来递减计数器。

最后,我们调用Wait方法来等待所有goroutine完成。一旦计数器归零,Wait方法将返回,程序继续执行。

运行上面的代码,你将看到类似以下的输出:

Goroutine 0 start
Goroutine 1 start
Goroutine 2 start
Goroutine 3 start
Goroutine 4 start
Goroutine 0 done
Goroutine 2 done
Goroutine 3 done
Goroutine 4 done
Goroutine 1 done
All goroutines done

从输出中可以看出,所有的goroutine都已经完成,并且在最后打印了"All goroutines done"。

通过使用WaitGroup,我们可以方便地等待一组goroutine的完成,从而控制程序的执行顺序和并发度。这在并发编程中是非常常见和实用的技术。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: golang闭包的应用场景有哪些