waitgroup 是 Go 中一种用于协调 goroutine 执行的同步机制。使用它可以确保主 goroutine 等待一组 goroutine 完成后再继续执行。具体用法:创建 w
waitgroup 是 Go 中一种用于协调 goroutine 执行的同步机制。使用它可以确保主 goroutine 等待一组 goroutine 完成后再继续执行。具体用法:创建 waitgroup 实例,并为它设置一个初始计数器,表示要等待的 goroutine 数。对于每个要等待的 goroutine,调用 wg.add(1) 来增加计数器。在 goroutine 完成后,调用 wg.done() 来减少计数器。最后,主 goroutine 调用 wg.wait() 来阻塞自身,直到所有 goroutine 都已完成。
如何使用 WaitGroup 在 Go 中等待 Goroutine 完成
Go 中的 WaitGroup
是一种同步机制,用于协调多个 goroutine 的执行。它允许主 goroutine 等待一组 goroutine 完成,从而确保在继续执行之前所有相关任务都已完成。
用法:
创建一个 WaitGroup
实例,并为其设置一个初始计数器,表示要等待的 goroutine 数。对于每个要等待的 goroutine,调用 wg.Add(1)
来增加计数器,并在 goroutine 完成后调用 wg.Done()
来减少计数器。最后,主 goroutine 调用 wg.Wait()
来阻塞自身,直到所有 goroutine 都已完成。
代码示例:
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func main() {
// 创建一个需要等待 3 个 goroutine 完成的 WaitGroup
wg.Add(3)
// 创建 3 个 goroutine
for i := 0; i < 3; i++ {
go func(i int) {
fmt.Printf("Goroutine %d started\n", i)
// 模拟一些需要时间的工作
for j := 0; j < 10000; j++ {}
fmt.Printf("Goroutine %d finished\n", i)
// 通知 WaitGroup 该 goroutine 已完成
wg.Done()
}(i)
}
// 等待所有 goroutine 完成
wg.Wait()
fmt.Println("All goroutines have finished")
}
实战案例:
此代码示例模拟了一个简单的 WEB 服务器,该服务器会启动多个 goroutine 来处理请求。为了确保在关闭服务器之前 goroutine 已完成,我们使用 WaitGroup
来等待所有 goroutine 完成。
package main
import (
"fmt"
"net/Http"
"sync"
)
var wg sync.WaitGroup
func main() {
// 创建一个需要等待所有 HTTP 请求完成的 WaitGroup
wg.Add(10)
// 监听端口 8080
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
// 请求处理完毕后,通知 WaitGroup
wg.Done()
})
http.ListenAndServe(":8080", nil)
// 等待所有 HTTP 请求完成
wg.Wait()
fmt.Println("All HTTP requests have been processed")
}
以上就是golang函数如何通过WaitGroup等待goroutine完成?的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: golang函数如何通过WaitGroup等待goroutine完成?
本文链接: https://www.lsjlt.com/news/611527.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0