c语言编程笔录

首页 >   > 笔记大全

笔记大全

go同步协程的必备工具WaitGroup怎么使用

更新时间:2023-07-18

前言:

在并发编程中,协程是一种轻量级的线程,它能在一个线程中实现多个任务的并发执行。在使用协程进行并发编程时,必然会遇到需要同步协程的情况。WaitGroup是Go语言中提供的一个用于等待协程执行完毕的工具,它能够解决协程同步的问题。在本文中,我们将介绍WaitGroup的使用方法和相关示例。

WaitGroup的使用:

WaitGroup在sync包中定义,使用前需要先导入sync包。WaitGroup主要提供了三个方法:Add()、Done()和Wait()。 - Add(delta int):添加或减少等待的协程数量。 - Done():相当于调用Add(-1),表示一个协程已经完成。 - Wait():阻塞直到计数器归零。 通常的使用步骤是: - 在主协程中创建WaitGroup对象,并设置需要等待的协程数量。 - 在需要并发执行的协程中调用Add()方法增加等待数量。 - 协程完成任务后调用Done()方法减少等待数量。 - 最后主协程调用Wait()方法阻塞等待,直到等待数量归零。 下面是一个简单的示例,展示了如何使用WaitGroup来同步多个协程的执行:
package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var wg sync.WaitGroup
	wg.Add(2)
	go func() {
		defer wg.Done()
		time.Sleep(1 * time.Second)
		fmt.Println("协程1执行完成")
	}()
	go func() {
		defer wg.Done()
		time.Sleep(2 * time.Second)
		fmt.Println("协程2执行完成")
	}()
	wg.Wait()
	fmt.Println("主协程退出")
}
上面的代码中,创建了一个WaitGroup对象,并设置需要等待的协程数量为2。在两个协程中分别进行了一些耗时操作,并在完成后调用了Done()方法。最后在主协程中调用Wait()方法,等待两个协程执行完毕。当两个协程都执行完成后,主协程才会继续执行,并输出"主协程退出"。

总结:

通过使用WaitGroup,我们可以有效地同步并发执行的协程。它提供了Add()、Done()和Wait()这三个方法,可以方便地控制等待的协程数量。在实际应用中,我们可以根据需要创建多个协程,并使用WaitGroup来等待它们的执行。在协程执行完成后,主协程才会继续往下执行。这样就能够有效地控制协程之间的并发执行和等待。总结起来,WaitGroup是Go语言中实现协程同步的必备工具之一。