Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyegerakkan Goroutine menggunakan WaitGroup dalam Go?

Bagaimana untuk menyegerakkan Goroutine menggunakan WaitGroup dalam Go?

WBOY
WBOYasal
2024-06-01 21:18:00489semak imbas

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

Bagaimana untuk menggunakan WaitGroup untuk menyegerakkan Goroutine dalam Go?

Apakah itu 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 ialah jenis terbina dalam Go yang digunakan untuk menyelaraskan operasi serentak Ia boleh digunakan untuk memastikan bahawa sekumpulan goroutine tidak meneruskan pelaksanaan sehingga ia menyelesaikan pelaksanaan. 🎜🎜🎜Cara menggunakan WaitGroup🎜🎜🎜Langkah-langkah untuk menggunakan WaitGroup adalah seperti berikut: 🎜
  1. 🎜Buat 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. 🎜Gunakan Add() dalam goroutine🎜
🎜Apabila goroutine baharu bermula melaksanakan , gunakan WaitGroup.Add(1) untuk menambah pembilang. 🎜rrreee
  1. 🎜Gunakan Done() dalam goroutine🎜
🎜Apabila goroutine selesai melaksanakan, gunakan WaitGroup () untuk mengurangkan kaunter. 🎜rrreee
  1. 🎜Tunggu sehingga Goroutine selesai🎜
🎜Gunakan WaitGroup.Wait() untuk menyekat goroutine semasa sehingga semua berkaitan goroutines Pelaksanaan lengkap. 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh yang menunjukkan cara menggunakan WaitGroup untuk menyegerakkan tiga goroutin serentak: 🎜rrreee

Atas ialah kandungan terperinci Bagaimana untuk menyegerakkan Goroutine menggunakan WaitGroup dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn