首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Go程序例子(31):通道同步

Go程序例子(31):通道同步

原创
作者头像
用户11078756
发布2024-12-17 17:05:34
发布2024-12-17 17:05:34
1090
举报
文章被收录于专栏:go程序例子go程序例子

我们可以使用通道来同步多个 goroutine 的执行。以下是一个使用阻塞接收等待 goroutine 完成的示例。当需要等待多个 goroutine 完成时,你可能更倾向于使用 WaitGroup。

代码语言:go
复制
package main

import (
    "fmt"
    "time"
)
// 这是我们将在 goroutine 中运行的函数。done 通道将用于通知另一个 goroutine,该函数的工作已完成。
func worker(done chan bool) {
    fmt.Print("working...")
    time.Sleep(time.Second)
    fmt.Println("done")
	// 发送一个值以通知我们已完成。
    done <- true
}

func main() {
	// 启动一个工作 goroutine,并为其提供用于通知的通道。
    done := make(chan bool, 1)
    go worker(done)
	// 阻塞,直到我们从工作 goroutine 接收到通道上的通知。
    <-done
}

运行结果:

代码语言:javascript
复制
$ go run channel-synchronization.go      
working...done  

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档