在Go语言中,可以使用sync.WaitGroup来实现多个协程的同步操作,以控制对全局变量的并发访问。
首先,你需要引入sync包,并创建一个sync.WaitGroup对象。然后,在每个协程开始执行之前,使用Add()方法增加WaitGroup的计数器。当每个协程完成任务时,通过调用Done()方法减少计数器。
下面是一个示例代码:
package main
import (
"fmt"
"sync"
)
var globalVariable int
var wg sync.WaitGroup
func main() {
numGoroutines := 5
// 增加WaitGroup的计数器
wg.Add(numGoroutines)
for i := 0; i < numGoroutines; i++ {
go incrementGlobalVariable(i)
}
// 等待所有协程完成任务
wg.Wait()
fmt.Println("Final value of global variable:", globalVariable)
}
func incrementGlobalVariable(id int) {
defer wg.Done()
// 进行需要同步操作的代码
for j := 0; j < 10000; j++ {
// 使用互斥锁保护全局变量
mutex.Lock()
globalVariable++
mutex.Unlock()
}
}
在上面的示例中,我们创建了5个协程来递增全局变量globalVariable的值。通过使用互斥锁(即mutex.Lock()和mutex.Unlock()),我们确保了对全局变量的安全并发访问。
请注意,在每个协程中,我们使用defer wg.Done()来在函数执行完成后减少WaitGroup的计数器。最后,主函数调用wg.Wait()来等待所有协程完成任务。
这样,就可以实现多个协程对全局变量的同步操作了。
内容由零声教学AI助手提供,问题来源于学员提问




