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

溫馨提示×

并發控制實例解析:Golang中使用Go WaitGroup完成任務

小云
105
2023-10-08 16:20:48
欄目: 編程語言

在Golang中,我們可以使用sync包中的WaitGroup來實現并發控制。WaitGroup用于等待一組goroutine完成執行。

下面是一個使用WaitGroup來完成任務的示例:

package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
// 設置要執行的任務數量
taskCount := 5
wg.Add(taskCount)
for i := 1; i <= taskCount; i++ {
go performTask(i, &wg)
}
// 等待所有任務完成
wg.Wait()
fmt.Println("所有任務已完成")
}
func performTask(id int, wg *sync.WaitGroup) {
defer wg.Done()
fmt.Printf("開始執行任務 %d\n", id)
time.Sleep(2 * time.Second)
fmt.Printf("任務 %d 完成\n", id)
}

在上面的示例中,我們首先創建了一個WaitGroup實例wg,然后設置要執行的任務數量為5,通過調用wg.Add(taskCount)方法來增加等待的goroutine數量。

接下來,我們使用一個循環來創建5個goroutine,并將每個goroutine的任務ID和WaitGroup實例的指針傳遞給performTask函數。

performTask函數中,我們使用defer關鍵字來確保在函數執行完成后調用wg.Done()方法,表示任務已完成。

在每個goroutine中,我們首先打印出任務開始執行的信息,然后通過time.Sleep函數模擬任務執行的時間。最后,我們打印出任務完成的信息。

最后,我們調用wg.Wait()方法來等待所有的goroutine完成任務。一旦所有的goroutine都調用了wg.Done()方法,Wait方法就會返回,程序繼續執行后面的代碼。

運行上面的代碼,你會看到類似下面的輸出:

開始執行任務 1
開始執行任務 2
開始執行任務 3
開始執行任務 4
開始執行任務 5
任務 3 完成
任務 1 完成
任務 4 完成
任務 5 完成
任務 2 完成
所有任務已完成

從輸出可以看出,5個任務是并發執行的,但是最后的輸出表明所有的任務都已完成。

使用WaitGroup來完成任務的并發控制,它可以確保在所有的goroutine執行完成之前,主goroutine會一直等待。這在需要等待一組goroutine完成執行后再進行后續操作的場景中非常有用。

0
南雄市| 娄烦县| 济源市| 兴安县| 伊金霍洛旗| 马尔康县| 高雄县| 辰溪县| 江山市| 永丰县| 清水县| 讷河市| 乐至县| 马鞍山市| 明溪县| 乌审旗| 托克逊县| 长治市| 屯门区| 巴马| 柳林县| 黑龙江省| 平顺县| 个旧市| 宁陕县| 册亨县| 玛多县| 塔城市| 民乐县| 垦利县| 射阳县| 尼勒克县| 宜良县| 上饶市| 常山县| 张掖市| 荔浦县| 晋中市| 全南县| 定结县| 贡山|