【发布时间】:2019-09-12 00:44:49
【问题描述】:
我试图在下面重新创建一个情况,其中我试图同时运行三个函数。但是,我只能在第一个函数的某个点之后运行第二个和第三个函数,因为它取决于第一个函数的值。对于这种情况,我使用了一个频道。这是我的代码:
package code
import "fmt"
func First(c chan string) {
for i := 0; i < 10000; i++ {
continue
}
test := "test"
fmt.Println(test)
c <- test
for i := 0; i < 10000; i++ {
fmt.Print(i)
}
}
func Second(c chan string) {
msg:= <- c
fmt.Println(msg)
if msg != "" { // I need to run the whole of First before running second and third concurrently then
fmt.Println("second", msg)
for i := 0; i < 10000; i++ {
fmt.Print(i)
}
}
}
func Third(c chan string) {
msg:= <- c
fmt.Println("third", msg)
for i := 0; i < 10000; i++ {
fmt.Print(i)
}
}
package main
import (
"./code"
"fmt"
"sync"
//"sync"
"time"
)
func main() {
start := time.Now()
var wg sync.WaitGroup
wg.Add(3)
var c chan string = make(chan string)
go func() {
code.First(c)
wg.Done()
}()
go func() {
code.Second(c)
wg.Done()
}()
go func() {
code.Third(c)
wg.Done()
}()
wg.Wait()
end := time.Now()
delta := end.Sub(start)
fmt.Println("time", delta.Seconds())
}
目前,我遇到了僵局。几个额外的问题 - 有没有办法首先检查通道给出的值,如果它们不是某些预期值,我首先完成运行第一个函数,然后同时运行第二个和第三个函数?本质上是一张像我第二次添加的支票?如果它是预期值,我希望所有函数在通道从第一个函数获取特定值后同时运行。
【问题讨论】:
标签: go concurrency goroutine