2 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個贊
據(jù)我了解,您將渠道視為一個變量。一個可以保存一些值的變量。因此,如果有一些,value1
而您又寫了另一個,value2
那么您基本上預(yù)計(jì)它們value1
會消失。這是錯誤的。
嘗試將通道視為緩沖區(qū)或優(yōu)先級隊(duì)列(有些人認(rèn)為比較粗略)。通道有它的大?。愕牡谌齻€變量3
),它告訴它可以同時有多少個值。一旦你在通道中放入了一些東西,你就可以將它看作是優(yōu)先級等于完成這個 go-routine 所需時間的進(jìn)程。
因此,在您的情況下,您將 3 個元素放入優(yōu)先級隊(duì)列中go wait()
,然后使用w1, w2, w3 := <-c, <-c, <-c
. 所以沒有什么會被覆蓋。

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個贊
無緩沖通道在發(fā)送數(shù)據(jù)之前同步。因此,在這種情況下,您<-c
在分配行中的連續(xù)調(diào)用將阻塞,直到另一端的等待函數(shù)通過發(fā)送某些內(nèi)容為止。
不過,Markus 提出了一個很好的觀點(diǎn),應(yīng)該指出這w1, w2, w3 := <-c, <-c, <-c
只是因?yàn)槟呀?jīng)錯開了不同等待功能的等待時間。如果這些函數(shù)在通道上發(fā)送數(shù)據(jù)之前等待了任意時間,您將無法保證 w2 被分配給從 wait2 發(fā)送的結(jié)果。它只會被設(shè)置為通過通道發(fā)送的第二個值。
- 2 回答
- 0 關(guān)注
- 192 瀏覽
添加回答
舉報(bào)