首頁 > 後端開發 > Golang > 如何在 Go 中使用WaitGroup同步 Goroutine?

如何在 Go 中使用WaitGroup同步 Goroutine?

WBOY
發布: 2024-06-01 21:18:00
原創
491 人瀏覽過

如何在 Go 中使用WaitGroup同步 Goroutine?

如何在 Go 中使用 WaitGroup 同步 Goroutine?

什麼是 WaitGroup

WaitGroup 是 Go 中的內建類型,用於協調並發操作,它可以用來確保一組 goroutine 在執行完成之前不會繼續執行。

如何使用WaitGroup

#使用WaitGroup 的步驟如下:

  1. #建立WaitGroup
var wg sync.WaitGroup
登入後複製
  1. #在goroutine 中使用Add()

當一個新的goroutine 開始執行時,使用WaitGroup.Add(1) 來增加計數器。

wg.Add(1)
go func() {
  // goroutine 代码
  wg.Done()
}()
登入後複製
  1. 在goroutine 中使用Done()

當goroutine 執行完畢時,使用WaitGroup. Done() 來減少計數器。

func() {
  // goroutine 代码
  wg.Done()
}
登入後複製
  1. 等待Goroutine 完成

使用WaitGroup.Wait() 來阻塞目前goroutine,直到所有關聯的goroutine完成執行。

wg.Wait()
登入後複製

實戰案例

以下是一個範例,示範如何使用 WaitGroup 同步三個並發 goroutine:

package main

import (
  "fmt"
  "sync"
)

func main() {
  var wg sync.WaitGroup

  // 创建三个并发 goroutine
  for i := 0; i < 3; i++ {
    wg.Add(1)
    go func(i int) {
      defer wg.Done()
      fmt.Printf("Goroutine %d complete\n", i)
    }(i)
  }

  // 等待所有 goroutine 完成执行
  wg.Wait()

  // 输出:Goroutine 0 complete
  // 输出:Goroutine 1 complete
  // 输出:Goroutine 2 complete

  fmt.Println("All goroutines completed")
}
登入後複製

以上是如何在 Go 中使用WaitGroup同步 Goroutine?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
go
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板