我想依次執行 2 個 goroutine,一個接一個。
例如,我在 main 函式中呼叫了以下 goroutine:
go func1()
go func2()
而且我希望 func1() 應該首先完成它的執行,然后只有 func2() 應該執行,每次我運行我的主函式時。
如何在 goroutines 中實作這種排序?
謝謝。
uj5u.com熱心網友回復:
為了確保函式的順序執行,請在單個 goroutine 中運行函式:
go func() {
func1()
func2()
}()
uj5u.com熱心網友回復:
如果你真的希望它們作為單獨的 goroutines(為什么?)你需要同步它們。您可以使用通道、互斥鎖或其他并發原語。下面的示例使用信令通道實作了這一點:
ch := make(chan struct{})
go func() {
func1()
close(ch)
}
go func() {
<-ch
func2()
}
游樂場:https : //go.dev/play/p/ZqHz-ILpA2J
編輯:按照 Paul Hankin 的建議,使用close(ch)而不是ch <- struct{}{}表示完成。
uj5u.com熱心網友回復:
對于順序運行的 goroutine ,您應該始終使用syncpackage
package main
import (
"fmt"
"sync"
)
func main() {
var w sync.WaitGroup
w.Add(1)
go fun1(&w)
w.Wait()
w.Add(1)
go fun2(&w)
w.Wait()
}
func fun1(w *sync.WaitGroup) {
i:=1000
for i>0{
i-=1
}
fmt.Println("fun1")
defer w.Done()
}
func fun2(w *sync.WaitGroup) {
fmt.Println("fun2")
defer w.Done()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409653.html
標籤:
上一篇:如何在Go中將單行代碼拆分為多行
