亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果功能相同,如何使 Goroutine 不并發

如果功能相同,如何使 Goroutine 不并發

Go
繁花不似錦 2022-12-05 16:36:02
如果是同一個函數,有沒有辦法讓 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 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

您可以使用鎖將對資源的訪問一次限制為一個線程,如下所示

i := 1

iLock = &sync.Mutex{}


for {

    go func() {

        iLock.Lock()

        fmt.Printf("Value of i: %d\n", i)

        iLock.Unlock()

    }

}

更多例子在這里

不確定您使用的是什么WaitGroup。如果是為了達到你想要的順序性,那么可以去掉。



查看完整回答
反對 回復 2022-12-05
?
海綿寶寶撒

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...)

                  

              }()

              

        }

}


查看完整回答
反對 回復 2022-12-05
  • 2 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號