gpt4 book ai didi

go - 如何阻止除正在运行的 goroutines 之外的所有 goroutines

转载 作者:IT王子 更新时间:2023-10-29 01:49:08 26 4
gpt4 key购买 nike

我有两个(但以后我会是三个)go 例程来处理来自远程服务器(来自 ampq channel )的传入消息。但是因为它们正在处理相同的数据/状态,所以我想阻止所有其他 go 例程,除了正在运行的例程。

我想出了一个解决方案来使用 chan bool每个 go 例程阻塞然后释放它的地方,代码如下:

package main

func a(deliveries <-chan amqp, handleDone chan bool) {
for d := range deliveries {
<-handleDone // Data comes always, wait for other channels
handleDone <- false // Block other channels

// Do stuff with data...

handleDone <- true // I'm done, other channels are free to do anything
}
}

func b(deliveries <-chan amqp, handleDone chan bool) {
for d := range deliveries {
<-handleDone
handleDone <- false
// Do stuff with data...
handleDone <- true
}
}

func main() {
handleDone := make(chan bool, 1)
go a(arg1, handleDone)
go b(arg2, handleDone)
// go c(arg3, handleDone) , later

handleDone <- true // kickstart
}

但是第一次每个函数都会得到handleDone <- true ,他们将被执行。稍后如果我再添加第三个函数,事情就会变得更复杂。如何阻止除运行之外的所有其他 go routines?还有其他更好的解决方案吗?

最佳答案

您想查看同步包。

http://golang.org/pkg/sync/

您可以使用互斥体来做到这一点。

关于go - 如何阻止除正在运行的 goroutines 之外的所有 goroutines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15416071/

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