Go 语言 Goroutine 关闭:只有创建者可以关闭
"这句话的意思是,只有创建一个goroutine的goroutine(也就是父goroutine)可以关闭它。在Go语言中,goroutine是轻量级的执行单元,可以并发地执行代码。当创建一个goroutine时,它会在后台执行,并且不会阻塞父goroutine的执行。\n\n如果想要关闭一个goroutine,只能通过父goroutine发送一个信号给子goroutine,让它自己安全地退出。这可以通过使用通道来实现。父goroutine可以创建一个通道,并将其传递给子goroutine,子goroutine可以定期地检查这个通道,如果收到关闭的信号,则可以安全地退出。\n\n举个例子:\n\ngo\nfunc main() {\n done := make(chan bool) // 创建一个通道\n\n go childRoutine(done) // 创建子goroutine,并传递通道\n\n time.Sleep(time.Second) // 等待一段时间\n\n done <- true // 发送关闭信号给子goroutine\n}\n\nfunc childRoutine(done chan bool) {\n for {\n // 做一些工作\n\n select {\n case <-done: // 检查通道是否收到关闭信号\n return // 安全退出\n default:\n // 继续执行\n }\n }\n}\n\n\n在这个例子中,父goroutine创建了一个通道done,并将其传递给子goroutine。子goroutine在一个无限循环中执行一些工作,同时定期地检查通道是否收到关闭信号。如果收到关闭信号,则子goroutine会安全地退出。父goroutine在一段时间后发送关闭信号给子goroutine,以关闭它。\n\n需要注意的是,无法从外部强制关闭一个goroutine。只能通过发送关闭信号给子goroutine,让它自己决定何时退出。这是为了保证goroutine的安全性和可靠性。
原文地址: https://www.cveoy.top/t/topic/p8nG 著作权归作者所有。请勿转载和采集!