gobyexample-channel-synchronization

來源:https://github.com/xg-wang/gobyexample/tree/master/examples

//我們可以使用通道來同步Go協(xié)程間的執(zhí)行狀態(tài)。這里是一個通過使用
//阻塞的接收方式來等待一個Go協(xié)程的運行結束
package main

import (
    "fmt"
    "time"
)

//這是一個我們將要在 Go 協(xié)程中運行的函數。`done`通道
//將被用于通知其他 Go 協(xié)程這個函數已經工作完畢
func worker(done chan bool) {
    fmt.Print("working...")
    time.Sleep(time.Second)
    fmt.Println("done")

    //發(fā)送一個值來通知我們已經完工了
    done <- true
}

func main() {

    //運行一個worker Go 協(xié)程,并給予用于通知的通道
    done := make(chan bool, 1)
    go worker(done)

    // 程序將在接收到通道中worker發(fā)出的通知前一直阻塞
    <-done
    //如果移除此段代碼,程序甚至會在`worker`還沒有開始運行就結束了
}


輸出結果:

working...done

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容