gpt4 book ai didi

go - 如何确保所有 goroutines 在没有 time.Sleep 的情况下终止?

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

<分区>

我正在尝试使用关于谁先收到消息的 go 例程。然而,当主 goroutine 终止时,一些 go routines 仍然存在。我通过 panic 的堆栈跟踪看到了这一点。但是,如果我添加 time.Sleep 它们都会终止。我猜这是因为,当主要的 go 例程结束时,Go 运行时找不到时间终止其他例程。

    package main

import (
"fmt"
"time"
)

func main() {
for i := 0; i < 1000000; i++ {
algo()
}

// without this, some goroutines do not terminate
// time.Sleep(time.Second)

panic("")
}

func algo() {
c := make(chan int)
wait := make(chan bool)

go racer(1, wait, c)
go racer(2, wait, c)
go racer(3, wait, c)
go racer(4, wait, c)
go racer(5, wait, c)

// who gets it first
c <- 5
close(wait)
}

func racer(name int, wait chan bool, c chan int) {
select {
case <-wait:
case v := <-c:
fmt.Println(name, ":", v)
}
}

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