这个讨论源于 Go 中工人和控制器模型的优雅实现。然而,代码面临一个问题:当工作人员退出时,从工作人员切片中删除工作人员通道会导致死锁。
尝试纠正这种情况,例如关闭worker()内的通道或使用互斥锁保护,导致恐慌或僵局。提出的解决方案是让控制器跳过关闭的通道,但是缺乏一种在不读取通道关闭的情况下检测通道关闭的方法。
根据提供的解决方案,检测通道关闭在 Go 中本质上是有限的。虽然可以通过从引发的恐慌中恢复来确定用于写入的通道的状态,但只能通过执行读取操作来检查用于读取的通道是否关闭,这可能会导致阻塞或错误结果。
可用于检查通道关闭的选项包括:
只有阻塞选项可以避免从通道读取数据,但其用处有限。
因此,结论是,虽然有一个检查函数会有所帮助不读就关闭通道,Go 目前的局限性使其成为一个挑战。以上是你能在不读取的情况下检测 Go 中的通道关闭吗?的详细内容。更多信息请关注PHP中文网其他相关文章!