3 回答
TA贡献1820条经验 获得超10个赞
如果你真的希望它们作为单独的 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{}{}表示完成。
TA贡献1866条经验 获得超5个赞
对于顺序运行的 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()
}
- 3 回答
- 0 关注
- 76 浏览
添加回答
举报