這個討論源自於 Go 中工人與控制器模型的優雅實作。然而,程式碼面臨一個問題:當工作人員退出時,從工作人員切片中刪除工作人員通道會導致死鎖。
嘗試修正這種情況,例如關閉worker()內的通道或使用互斥鎖保護,導致恐慌或僵局。提出的解決方案是讓控制器跳過關閉的通道,但是缺乏一種在不讀取通道關閉的情況下檢測通道關閉的方法。
根據提供的解決方案,偵測通道關閉在 Go 中本質上是有限的。雖然可以透過從引發的恐慌中恢復來確定用於寫入的通道的狀態,但只能透過執行讀取操作來檢查用於讀取的通道是否關閉,這可能會導致阻塞或錯誤結果。
可用於檢查通道關閉的選項包括:
只有阻塞選項可以避免從通道讀取數據,但其用處有限。
因此,結論是,雖然有一個檢查函數會有所幫助不讀就關閉通道,Go 目前的局限性使其成為一個挑戰。以上是你能在不讀取的情況下偵測 Go 中的通道關閉嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!