Golang 协程的同步:关闭通道-测试阻塞的通道
package main
import (
"fmt"
"time"
)
func main() {
// 创建一个非缓冲的通道,用于同步协程
done := make(chan struct{})
// 启动一个协程,它将在接收到通道消息前一直阻塞
go func() {
fmt.Println("协程启动")
<-done // 阻塞,直到接收到消息
fmt.Println("协程结束")
}()
// 等待一段时间,确保协程已经开始执行
time.Sleep(1 * time.Second)
// 关闭通道,解除阻塞状态
close(done)
// 等待一段时间,确保协程已经接收到消息并打印结束
time.Sleep(1 * time.Second)
}
这段代码创建了一个非缓冲的通道done
,并在一个协程中阻塞了它。通过关闭通道,协程接收到消息,打印出消息并结束。这是一个简单的同步协程的例子。
评论已关闭