第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

無緩沖通道 - 多值傳遞

無緩沖通道 - 多值傳遞

Go
至尊寶的傳說 2022-06-13 15:55:41
package mainimport (    "fmt")func main() {    in := make(chan int, 10)    out := make(chan int)    for i := 0; i < 10; i++ {        in <- i    }    close(in)    go func() {        for {            i, ok := <-in            if !ok {                close(out)                break            }            out <- i * 2 //THIS LINE        }    }()    for v := range out { // AND HERE        fmt.Println(v)    }}我對(duì) Go 有點(diǎn)陌生,了解了緩沖通道和無緩沖通道之間的區(qū)別,但我不確定這段代碼是如何工作的。由于out通道沒有緩沖,它不應(yīng)該造成死鎖嗎?我錯(cuò)過了什么?
查看完整描述

2 回答

?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊

outchannel 是無緩沖的,所以如果你在沒有另一個(gè) goroutine 等待讀取它的情況下寫入它,它將阻塞。讀取也一樣:它將阻塞,直到另一個(gè) goroutine 寫入它。因此,goroutine 在寫入時(shí)阻塞,直到 main 中的 for 循環(huán)從中讀取。主 goroutine 會(huì)從 out 讀取直到它關(guān)閉,所以當(dāng) goroutine 最終關(guān)閉時(shí),for 循環(huán)終止。



查看完整回答
反對(duì) 回復(fù) 2022-06-13
?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

按照它的工作原理:

in := make(chan int, 10) out := make(chan int)

上面你正在創(chuàng)建兩個(gè)通道。in被緩沖可以容納 10 個(gè)值。out無緩沖只能保存 1 個(gè)值

對(duì)于我:= 0;我 < 10; i++ { 在 <- i }

在上面,您正在向您的輸入頻道添加 10 個(gè)值 [0-9]

逼近)

上面你正在關(guān)閉in頻道上的寫入。請(qǐng)記住,繼續(xù)閱讀in仍然是開放的。

去函數(shù)(){

您正在創(chuàng)建一個(gè) go 例程來讀取in通道的值。(最佳實(shí)踐實(shí)際上是將 func 傳遞in給 func ,但這不是這里的重點(diǎn)。

   for {
       i, ok := <-in

在您的循環(huán)上方,您讀取值直到in為空(為空ok時(shí)為假)

       if !ok {
                  close(out)
                             break
       }

當(dāng)您out完成從in. 直到下面的行執(zhí)行。

       out <- i * 2 //THIS LINE

在上面你寫入通道out并阻塞這個(gè) goroutine 直到它的值被讀取。循環(huán)將持續(xù) 10 次。

for v := range out { // AND HERE fmt.Println(v) }

上面,回到主 goroutine,您將從 讀取值out,阻塞并將控制權(quán)傳遞給另一個(gè) goroutine。這一直持續(xù)到 for 循環(huán)中斷并out關(guān)閉。


查看完整回答
反對(duì) 回復(fù) 2022-06-13
  • 2 回答
  • 0 關(guān)注
  • 126 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)