我创建了两个 go 例程sender和receiver,sender 将不断从用户(键盘)获取数据并写入流,receiver 将独立地从流中获取值将其打印到屏幕上。两者都使用 goroutine 并发
在某个时间点接收器失败并关闭连接并退出接收器 go 例程,但等待用户输入(i/o 操作)的发送器 go 例程不会关闭。这种场景下如何退出所有的goroutine?
下面是此场景的示例代码。
package main
import (
"fmt"
"time"
)
var stop bool = false
func sender() {
str := ""
for !stop {
fmt.Scanf("%s", &str)
fmt.Println("Entered :", str)
}
fmt.Println("Closing sender goroutine")
}
func receiver() {
i := 0
for !stop {
i++
if i > 5 {
stop = true
}
time.Sleep(1 * time.Second)
}
fmt.Println("Closing receiver goroutine")
}
func main() {
go sender()
go receiver()
/* Wait for goroutines to finish */
for !stop {
time.Sleep(1 * time.Millisecond)
}
time.Sleep(1 * time.Second)
panic("Display stack")
}
上面的代码发送者将在 5 个循环接收者退出接收者程序后等待用户输入。 I expect when receiver close, go routine which waiting on i/o has to be closed.
请帮助我解决这个问题。
素胚勾勒不出你
阿波罗的战车
相关分类