小编Jul*_*ska的帖子

是否可以使用 select 从多个 goroutine 中安全地关闭一次通道?

我的解决方案如下,但是以下代码中是否存在竞争条件(它会出现恐慌)吗?

c := make(chan struct{})

for i := 0; i < 1000000; i++ {
    go func() {
        select {
        case <-c:
        default:
            close(c)
        }
    }()
}
Run Code Online (Sandbox Code Playgroud)

我认为是的,但是 go test -race 没有检测到它,并且根据经验,我无法让它恐慌。

concurrency channel go goroutine

0
推荐指数
1
解决办法
128
查看次数

标签 统计

channel ×1

concurrency ×1

go ×1

goroutine ×1