2 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個贊
如果通道是無緩沖的(容量為零),則只有當(dāng)發(fā)送方和接收方都準(zhǔn)備就緒時,通信才會成功。
如果通道已緩沖(容量 >= 1),則如果通道未滿則發(fā)送成功且不會阻塞,如果緩沖區(qū)不為空則接收成功且不會阻塞。
當(dāng)像 intChannelZero <- 1 那樣將值賦給 intChannelZero 時,該值保存在哪里?
該值從發(fā)送方復(fù)制到接收方。除了實(shí)現(xiàn)可能使用的任何臨時變量外,該值不會保存在任何地方。
intChannelZero 和 intChannelOne 賦值時的區(qū)別。
在 intChannelZero 塊上發(fā)送,直到接收器準(zhǔn)備就緒。
發(fā)送 intChannelOne 塊,直到緩沖區(qū)中有可用空間。

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個贊
無緩沖和緩沖通道的區(qū)別在于,
發(fā)送到頻道被阻止
從通道接收被阻止
對于無緩沖通道
如果頻道已經(jīng)發(fā)送消息但尚未收到,則發(fā)送將被阻止。
如果從未發(fā)生過發(fā)送,則接收將被阻止。
對于緩沖通道
如果已經(jīng)發(fā)生 n(channel size) 次發(fā)送并且沒有收到任何發(fā)送,則發(fā)送將被阻止。即整個通道大小已被發(fā)送的消息使用,但沒有收到任何消息。
如果緩沖區(qū)為空,即沒有任何未使用的發(fā)送,則接收將被阻止
運(yùn)行時錯誤
接收阻塞將拋出波紋管錯誤
fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan receive]:
發(fā)送被阻止將拋出波紋管錯誤
fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan send]:
- 2 回答
- 0 關(guān)注
- 255 瀏覽
添加回答
舉報