如何按特定顺序运行 2 个 goroutine

我想依次执行 2 个 goroutine,一个接一个。

例如,我在 main 函数中调用了以下 goroutine:

go func1()
go func2()

而且我希望 func1() 应该首先完成它的执行,然后只有 func2() 应该执行,每次我运行我的主函数时。

如何在 goroutines 中实现这种排序?

谢谢。


BIG阳
浏览 78回答 3
3回答

慕标5832272

为了确保函数的顺序执行,请在单个 goroutine 中运行函数:go func() {     func1()     func2()     }()

拉莫斯之舞

如果你真的希望它们作为单独的 goroutines(为什么?)你需要同步它们。您可以使用通道、互斥锁或其他并发原语。下面的示例使用信令通道实现了这一点:ch := make(chan struct{})go func() {&nbsp; func1()&nbsp; close(ch)}go func() {&nbsp; <-ch&nbsp; func2()}游乐场:https ://go.dev/play/p/ZqHz-ILpA2J编辑:按照 Paul Hankin 的建议,使用close(ch)而不是ch <- struct{}{}表示完成。

心有法竹

对于顺序运行的 goroutine ,您应该始终使用syncpackagepackage mainimport (&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "sync")func main() {&nbsp; &nbsp; var w sync.WaitGroup&nbsp; &nbsp; w.Add(1)&nbsp; &nbsp; go fun1(&w)&nbsp; &nbsp; w.Wait()&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; w.Add(1)&nbsp; &nbsp; go&nbsp; fun2(&w)&nbsp; &nbsp; w.Wait()}func fun1(w *sync.WaitGroup) {&nbsp; &nbsp; i:=1000&nbsp; &nbsp; for i>0{&nbsp; &nbsp; &nbsp; &nbsp; i-=1&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println("fun1")&nbsp; &nbsp; defer&nbsp; &nbsp;w.Done()}func fun2(w *sync.WaitGroup) {&nbsp; &nbsp; fmt.Println("fun2")&nbsp; &nbsp; defer w.Done()}
打开App,查看更多内容
随时随地看视频慕课网APP