ZBLOG

golang 控制多个协程同步操作全局变量

在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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15351

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?