gpt4 book ai didi

multithreading - 如果一个 goroutine 已完成,控制 goroutine 关闭的规范方法是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:27 24 4
gpt4 key购买 nike

我有一段定义任务的结构,每个任务都在一个 goroutine 中运行,我希望所有的 goroutines 在第一个 goroutines 通过信号 task.signalComplete 完成任务时停止

目前我有以下内容。

for _, task := range taskList {
go func(task *myTask, firstCompleteSignal chan<- bool) {
for {
select {
// When the task completes, it emit signalComplete
case <-task.signalComplete:
firstCompleteSignal<-true
return
}
}

}(task, firstCompleteSignal)
}

for {
select {
case <-firstCompleteSignal:
// manually stop all go thread
return
}
}

这是规范的吗?

或者是否有像 sync.WaitGroup 这样的库来为我做这件事来等待所有 goroutine 完成?

最佳答案

常见的习惯用法是在调用代码和 goroutine 之间共享一个 Done channel 。

然后每个 goroutine 每次都通过 select 检查那个 channel 向调用代码发送一个新值。

你可以在 Go 的博客中找到一个很好的例子:

https://blog.golang.org/pipelines

(在那里寻找“明确取消”)

后来,他们将 context 包合并到标准库中,这是现在管理 goroutine 取消的最“标准”方式。

您可以在包本身的文档中找到一个很好的示例:

https://golang.org/pkg/context/#example_WithCancel

关于multithreading - 如果一个 goroutine 已完成,控制 goroutine 关闭的规范方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com