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

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

如何編寫(xiě)更好的雙通道選擇

如何編寫(xiě)更好的雙通道選擇

Go
catspeake 2021-08-16 19:08:26
在下面的代碼中有兩個(gè)包含工作的通道 A 和 B,在實(shí)際代碼中它們是不同的結(jié)構(gòu),工作人員需要在退出之前排空兩個(gè)通道。工作人員需要來(lái)自兩個(gè)渠道的信息。這兩個(gè) select 語(yǔ)句可以工作,但非常笨拙。如果我添加default:以使它們非阻塞,則代碼無(wú)法排出通道。有沒(méi)有更好的方式來(lái)編寫(xiě)選擇?現(xiàn)在,如果通道 A 沒(méi)有工作,則通道 B 也不會(huì)得到服務(wù)。另一個(gè)需要解決的問(wèn)題,但不是我主要關(guān)心的問(wèn)題。用于測(cè)試以下代碼的游樂(lè)場(chǎng):package mainimport (    "fmt"    "time")const (    fillCount  = 10 // number of elements in each input channel    numWorkers = 3  // number of consumers.)func Wait() {    time.Sleep(2000 * time.Millisecond)}func fillChannel(work chan string, name string) {    for i := 0; i < fillCount; i++ {        work <- fmt.Sprintf("%s%d", name, i)    }    close(work) // we're finished}func doWork(id int, ch1 chan string, ch2 chan string, done chan bool) {    fmt.Println("Running worker", id)    defer fmt.Println("Ending worker", id)    for ch1Open, ch2Open := true, true; ch1Open && ch2Open; {        cnt1 := len(ch1)        cnt2 := len(ch2)        if ch1Open {            select {            case str, more := <-ch1:                if more {                    fmt.Printf("%d: ch1(%d) %s\n", id, cnt1, str)                } else {                    fmt.Printf("%d: ch1 closed\n", id)                    ch1Open = false                }            }        }        if ch2Open {            select {            case str, more := <-ch2:                if more {                    fmt.Printf("%d: ch2(%d) %s\n", id, cnt2, str)                } else {                    fmt.Printf("%d: ch2 closed\n", id)                    ch2Open = false                }            }        }    }    done <- true}func main() {    a := make(chan string, 2) // a small channel    b := make(chan string, 5) // a bigger channel    // generate work    go fillChannel(a, "A")    go fillChannel(b, "B")    // launch the consumers    done := make(chan bool)    for i := 0; i < numWorkers; i++ {        go doWork(i, a, b, done)    }    // wait for the goroutines to finish.    for i := 0; i < numWorkers; i++ {        <-done    }
查看完整描述

1 回答

  • 1 回答
  • 0 關(guān)注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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