温馨提示×

go阻塞的协程怎么退出

go
小亿
132
2023-11-28 19:37:32
栏目: 编程语言

在Go中,协程的退出通常通过chan实现。下面是一种常见的模式来实现阻塞的协程退出:

package main

import (
    "fmt"
    "time"
)

func worker(done chan bool) {
    fmt.Println("协程开始执行...")
    
    // 模拟耗时操作
    time.Sleep(2 * time.Second)
    
    fmt.Println("协程执行完毕!")
    done <- true
}

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

在上面的例子中,worker函数是一个阻塞的协程,它执行一些耗时的操作。在worker函数执行完毕后,通过将true发送到done通道来通知主函数协程的完成。主函数使用<-done语法从通道中接收数据,从而阻塞等待协程的完成。一旦接收到数据,主函数就会继续执行,打印"主函数退出"。

这种使用chan来实现协程退出的模式非常常见,因为它提供了一种简单而可靠的方式来同步协程的执行。

0