猿问

golang 如何判断一个 goroutine 函数执行完成?

用 golang 的一个定时任务的第三方包,每隔 5s 执行 foo 函数,如下:

func foo() {    onlineRooms := getOnlineRooms()
    for _, room := range onlineRooms {
        go doSomeThing(room)
    }
}

这里取出所有在线的房间ID,然后启用 goroutine 执行 doSomeThing 函数,这个函数里有计算,从 Redis,MySQL 读写数据等操作,如果第一轮调用没执行完,就开始第二轮调用,就会有计算错误。

那么我想每次定时任务来的时候,判断这个函数有没有执行完,如果没有执行完就不重新调用,否则才调用,在 golang 中如何实现这个判断呢?


慕桂英546537
浏览 1540回答 4
4回答

千巷猫影

提供一个简单便于理解方案:func foo() {     onlineRooms := getOnlineRooms()    for _, room := range onlineRooms {        go doSomeThing(room)     } }func doSomeThing(room Room) {    //把redis操作换成全局变量亦可     if redis.Get(room){        return     }     redis.Set(room,true)    defer redis.Set(room,false) }

杨__羊羊

package mainimport (    "fmt"    "sync")var wg *sync.WaitGroupfunc main() {    wg = &sync.WaitGroup{}    for {        wg.Wait()        wg.Add(1)        go test()    }    fmt.Println("vim-go")}func test() {    //do something    wg.Done()}

四季花海

可以在room里加一个字段记录操作是否完成func foo() {    onlineRooms := getOnlineRooms()     for _, room := range onlineRooms {         if room.Done {             go doSomeThing(room)         }     } }
随时随地看视频慕课网APP

相关分类

Go
我要回答