亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 如何判斷一個 goroutine 函數執行完成?

golang 如何判斷一個 goroutine 函數執行完成?

Go
慕桂英546537 2019-01-29 06:02:38
用 golang 的一個定時任務的第三方包,每隔 5s 執行 foo 函數,如下:func foo() {    onlineRooms := getOnlineRooms()     for _, room := range onlineRooms {         go doSomeThing(room)     } }這里取出所有在線的房間ID,然后啟用 goroutine 執行 doSomeThing 函數,這個函數里有計算,從 Redis,MySQL 讀寫數據等操作,如果第一輪調用沒執行完,就開始第二輪調用,就會有計算錯誤。那么我想每次定時任務來的時候,判斷這個函數有沒有執行完,如果沒有執行完就不重新調用,否則才調用,在 golang 中如何實現這個判斷呢?
查看完整描述

4 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

提供一個簡單便于理解方案:

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)
}


查看完整回答
反對 回復 2019-03-16
?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

package main


import (

    "fmt"

    "sync"

)


var wg *sync.WaitGroup


func main() {

    wg = &sync.WaitGroup{}

    for {

        wg.Wait()

        wg.Add(1)

        go test()

    }

    fmt.Println("vim-go")

}

func test() {

    //do something

    wg.Done()

}


查看完整回答
反對 回復 2019-03-16
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

可以在room里加一個字段記錄操作是否完成

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


查看完整回答
反對 回復 2019-03-16
  • 4 回答
  • 0 關注
  • 1579 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號