溫馨提示×

go阻塞的協(xié)程怎么退出

go
小億
130
2023-11-28 19:37:32
欄目: 編程語言

在Go中,協(xié)程的退出通常通過chan實現(xiàn)。下面是一種常見的模式來實現(xiàn)阻塞的協(xié)程退出:

package main

import (
    "fmt"
    "time"
)

func worker(done chan bool) {
    fmt.Println("協(xié)程開始執(zhí)行...")
    
    // 模擬耗時操作
    time.Sleep(2 * time.Second)
    
    fmt.Println("協(xié)程執(zhí)行完畢!")
    done <- true
}

func main() {
    done := make(chan bool)
    
    go worker(done)
    
    // 阻塞等待協(xié)程完成
    <-done
    
    fmt.Println("主函數(shù)退出")
}

在上面的例子中,worker函數(shù)是一個阻塞的協(xié)程,它執(zhí)行一些耗時的操作。在worker函數(shù)執(zhí)行完畢后,通過將true發(fā)送到done通道來通知主函數(shù)協(xié)程的完成。主函數(shù)使用<-done語法從通道中接收數(shù)據(jù),從而阻塞等待協(xié)程的完成。一旦接收到數(shù)據(jù),主函數(shù)就會繼續(xù)執(zhí)行,打印"主函數(shù)退出"。

這種使用chan來實現(xiàn)協(xié)程退出的模式非常常見,因為它提供了一種簡單而可靠的方式來同步協(xié)程的執(zhí)行。

0