91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

Go WaitGroup的使用方式及實例詳解

小云
80
2023-10-12 09:34:23
欄目: 編程語言

WaitGroup 是 Go 語言的一個并發控制機制,它可以用于等待一組 goroutine 的結束。WaitGroup 提供了三個方法:Add、Done 和 Wait。

  1. Add 方法:用于設置 WaitGroup 中等待的 goroutine 的數量。Add 方法的參數是一個整數,表示需要等待的 goroutine 的數量。通常在啟動每個 goroutine 之前都會調用 Add 方法來增加要等待的 goroutine 的數量。

  2. Done 方法:用于通知 WaitGroup 一個 goroutine 的結束。在 goroutine 的最后調用 Done 方法來減少 WaitGroup 中等待的 goroutine 的數量。

  3. Wait 方法:用于阻塞當前 goroutine,直到 WaitGroup 中等待的 goroutine 的數量變為 0。一般在主 goroutine 里調用 Wait 方法,等待所有子 goroutine 結束后再繼續執行。

下面是一個使用 WaitGroup 的示例代碼:

package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Printf("goroutine %d\n", i)
}(i)
}
wg.Wait()
fmt.Println("All goroutines finished")
}

在上面的例子中,首先創建了一個 WaitGroup 對象 wg。然后使用一個 for 循環啟動了 5 個 goroutine,并在每個 goroutine 中調用了 wg.Add(1) 來增加 WaitGroup 中等待的 goroutine 的數量。在每個 goroutine 的最后調用了 wg.Done() 來通知 WaitGroup 一個 goroutine 的結束。最后在主 goroutine 中調用了 wg.Wait() 來等待所有的子 goroutine 結束。

上面的代碼運行時,可能會輸出類似如下的結果:

goroutine 4
goroutine 0
goroutine 3
goroutine 2
goroutine 1
All goroutines finished

可以看到,不同的 goroutine 的輸出順序是隨機的,這是因為它們是并發執行的。

總結:WaitGroup 是 Go 語言中一個用于等待一組 goroutine 結束的機制。通過調用 Add、Done 和 Wait 方法,可以實現對一組 goroutine 的并發控制。

0
环江| 鸡西市| 黎城县| 永安市| 清水河县| SHOW| 宣汉县| 休宁县| 尉犁县| 庆安县| 邵阳市| 治县。| 拉孜县| 宿迁市| 会理县| 客服| 寿阳县| 澄迈县| 南京市| 临武县| 台北县| 永济市| 榆社县| 梅河口市| 依安县| 南昌市| 梨树县| 汤原县| 河曲县| 丹东市| 综艺| 富源县| 永兴县| 沭阳县| 轮台县| 夏河县| 大方县| 偏关县| 孝感市| 孟连| 福贡县|