首頁 > 後端開發 > Golang > 如何控制Go例程的執行順序?

如何控制Go例程的執行順序?

Mary-Kate Olsen
發布: 2024-12-13 21:59:31
原創
248 人瀏覽過

How Can I Control the Execution Order of Go Routines?

Go 程式執行順序

此程式碼展示了Go 程式執行順序的概念,其中兩個並發的「go」例程或goroutine ,同時執行,但沒有任何保證的順序。

程式碼定義了一個 sum 函數,它接受一個整數陣列和一個通道作為輸入。此函數計算數組中整數的總和,並將結果傳送到提供的通道。

在 main 函數中,建立了一個通道 c 以便於 goroutine 之間的通訊。啟動兩個 goroutine,每個 goroutine 使用不同的輸入陣列執行 sum 函數,並將結果傳送到 c。

程式然後從通道 c 接收 goroutine 發送的值並列印它們。然而,goroutines 完成的順序是不確定的,因此輸出順序可能會有所不同。

要控制 goroutine 的執行順序,您可以使用各種機制,例如阻塞通道或標準提供的同步原語圖書館。以下是一些例子:

1。阻塞通道:

在此修改版本中,goroutines 透過阻塞主程式來順序執行,直到從通道接收到一個值:

func main() {
    c := make(chan int)

    go sum([]int{1, 2, 3}, c)

    // Block until a value is received from c
    x := <-c
    fmt.Println(x)

    go sum([]int{4, 5, 6}, c)

    // Block until a value is received from c
    x = <-c
    fmt.Println(x)
}
登入後複製

2。帶通道的等待群組:

另一個選項是在通道上使用等待群組和範圍,以確保所有goroutine 在處理結果之前已完成執行:

func main() {
    c := make(chan int)
    wg := new(sync.WaitGroup)

    wg.Add(1)
    go sum([]int{1, 2, 3}, c, wg)
    wg.Wait()

    wg.Add(1)
    go sum([]int{4, 5, 6}, c, wg)
    wg.Wait()

    close(c)

    for x := range c {
        fmt.Println(x)
    }
}
登入後複製

這些技術可讓您控制goroutine 的執行順序,以在並發程式中實現所需的行為。

以上是如何控制Go例程的執行順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板