如果是同一个函数,有没有办法让 goroutine 一个接一个(一个接一个)执行?我不是故意首先使用 goroutine 的。但是TCP中的“os/exec”函数会导致tcp强制停止。因此我使用 goroutine 来避免崩溃。但我还是希望他们按顺序执行,而不是同时执行。这是我的代码。func handleTCP(conn net.Conn) { defer conn.Close() fmt.Println("handle TCP function") for { wg := new(sync.WaitGroup) wg.Add(1) go func() { cmdArgs := []string{temp_str, test_press, gh, "sample.csv"} cmd := exec.Command("calib.exe", cmdArgs...) wg.Done() }() }}
2 回答
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
尝试将锁放入函数中,这会使它们的执行顺序进行。但请记住,wg.Done() 必须在函数的第一行处于延迟状态。是这样的:
var mu sync.Mutex
func handleTCP(conn net.Conn) {
defer conn.Close()
fmt.Println("handle TCP function")
for {
wg := new(sync.WaitGroup)
wg.Add(1)
go func() {
defer wg.Done()
mu.Lock()
defer mu.UnLock()
cmdArgs := []string{temp_str, test_press, gh, "sample.csv"}
cmd := exec.Command("calib.exe", cmdArgs...)
}()
}
}
- 2 回答
- 0 关注
- 83 浏览
添加回答
举报
0/150
提交
取消