當前位置: 首頁>>編程語言>>正文


Go語言教程:通道同步

返回Go語言教程首頁

概念簡介

我們可以使用通道來同步 Go語言 協程間的執行狀態。這裏是一個
使用阻塞的接受方式來等待一個 Go 協程的運行結束的例子。

例程代碼


package main

import "fmt"
import "time"

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

    // 發送一個值來通知我們已經完工啦。
    done <- true
}

func main() {

    // 運行一個 worker Go協程,並給予用於通知的通道。
    done := make(chan bool, 1)
    go worker(done)

    // 程序將在接收到通道中 worker 發出的通知前一直阻塞。
    <-done
}

執行&輸出


$ go run channel-synchronization.go
working...done

# 如果你把 `<- done` 這行代碼從程序中移除,程序甚至會在 `worker`
# 還沒開始運行時就結束了。

課程導航

學習上一篇:Go語言教程:通道緩衝    學習下一篇:Go語言教程:通道方向

相關資料

本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/channel-synchronization

Go語言通道同步

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4045.html,未經允許,請勿轉載。