【发布时间】:2018-08-03 00:26:10
【问题描述】:
以下程序从不打印“Full”。取消注释fmt.Println(len(choke)),当频道已满时程序输出“Full”。
package main
import (
"fmt"
)
func main() {
choke := make(chan string, 150000)
go func() {
for i := 0; i < 10000000; i++ {
choke <- string(i)
fmt.Println("i=", i)
}
}()
for {
//fmt.Println(len(choke))
if len(choke) >= 150000 {
fmt.Println("Full")
}
}
}
@tim-heckman 在OP 中解释了这种行为的原因。
如何在不使用热循环的情况下检测通道已满?
【问题讨论】:
-
@IvanAracki 我最初在这里发布了这个答案,它被删除了,因为这个问题对于这个答案来说太窄了