我正在尋找一種可靠的方法來(lái)確保 Go 中的空通道不會(huì)阻止我的執(zhí)行。我必須以特定順序(優(yōu)先級(jí)的種類)遍歷多個(gè)通道,一旦我找到其中包含項(xiàng)目的通道,請(qǐng)閱讀其中的一個(gè)。目前我以類似的方式做一些事情:if len(myChannel) > 0 { // Possible issue here: length could have changed to 0 making this blocking elm := <- myChannel return elm}從理論上講,這可能會(huì)導(dǎo)致等待時(shí)間過(guò)長(zhǎng),而不同的頻道可能有準(zhǔn)備“服務(wù)”的項(xiàng)目。有關(guān)如何改進(jìn)的任何建議?我可以在通道中使用互斥鎖,但感覺(jué)有更好的解決方案,盡管我不確定如何。
2 回答

炎炎設(shè)計(jì)
TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
我不確定這是否真的回答了“是否有可靠的方法來(lái)確保 Go 通道不會(huì)阻塞”的問(wèn)題。在 OP 的用例中,如果 recv 阻塞 / 只要集合中沒(méi)有其他通道不會(huì)阻塞 / 就可以了,這就是公認(rèn)的解決方案所實(shí)現(xiàn)的。這與“確保 recv 不會(huì)阻塞”不同,我認(rèn)為無(wú)法繞過(guò) OP 指出的競(jìng)爭(zhēng)條件的基本限制。
- 2 回答
- 0 關(guān)注
- 170 瀏覽
添加回答
舉報(bào)
0/150
提交
取消