Go で WaitGroup を使用して Goroutine を同期するにはどうすればよいですか?

WBOY
リリース: 2024-06-01 21:18:00
オリジナル
490 人が閲覧しました

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

Go で WaitGroup を使用して Goroutine を同期するにはどうすればよいですか?

WaitGroup とは何ですか? 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

🎜WaitGroup は、同時操作を調整するために使用される Go の組み込み型であり、ゴルーチンのグループが実行を完了するまで実行を継続しないようにするために使用できます。 🎜🎜🎜WaitGroupの使用方法🎜🎜🎜WaitGroupを使用する手順は次のとおりです: 🎜
  1. 🎜WaitGroupを作成します。 🎜
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")
}
ログイン後にコピー
  1. 🎜ゴルーチンで Add() を使用します🎜
🎜新しいゴルーチンの開始時を実行するには、WaitGroup.Add(1) を使用してカウンターをインクリメントします。 🎜rrreee
  1. 🎜ゴルーチンで Done() を使用します🎜
🎜ゴルーチンの実行が完了したら、WaitGroup Done を使用します。 () を使用してカウンターをデクリメントします。 🎜rrreee
  1. 🎜Goroutine が完了するまで待機します🎜
🎜WaitGroup.Wait() を使用して、関連付けられているすべての Goroutine が完了するまで現在の Goroutine をブロックしますgoroutines 実行を完了します。 🎜rrreee🎜🎜実際的なケース🎜🎜🎜 以下は、WaitGroup を使用して 3 つの同時ゴルーチンを同期する方法を示す例です。

以上がGo で WaitGroup を使用して Goroutine を同期するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
go
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート