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

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

如何在管道中同步 goroutine

如何在管道中同步 goroutine

Go
大話西游666 2021-10-25 16:54:28
我需要幫助來理解為什么以下代碼不起作用。我正在構(gòu)建一個(gè)管道并嘗試執(zhí)行一個(gè)步驟來同步來自兩個(gè)源通道的值。我的源代碼/生成器代碼如下所示(在我的真實(shí)代碼中,我從文件中讀取文本)。來源已排序,但不能保證值在兩個(gè)來源中。func Source() <-chan int{    out := make(chan int, 5)    go func() {        defer reader.Close()        out <- 1        out <- 2        out <- 3        out <- 4        out <- 5        out <- 7        close(out)    }()    return out}同步代碼如下所示:func Sync(a, b <-chan int) <-chan int {    out := make(chan int)    go func() {        av, ak:= <-a        bv, bk:= <-b        for ak || bk {            if !ak || av < bv {                out <- bv                bv, bk = <-b                continue            }            if !bk|| bv > av {                out <- av                av, ak = <-a                continue            }            out <- av            av, ak = <-a            bv, bk = <-b        }        close(out)    }()    return out}我的程序看起來像這樣:func main() {    os := Source()    ns := Source()    for val := range Sync(ns, os) {        fmt.Printf("[SYNCED] %v \n", val)    }}預(yù)期的行為是我的兩個(gè)源都將值緩沖到通道中,而我的同步首先從第一個(gè)源讀取值。然后從第二。比較它們,如果它們相等,則繼續(xù)兩個(gè)通道中的下一個(gè)。如果不同,我們將發(fā)送后面的值并用新值替換它并再次進(jìn)行相同的比較。發(fā)生的事情是,看起來同步代碼對(duì)這些值運(yùn)行了幾次,我會(huì)多次得到 [SYNCED] 1 之類的東西。為什么?
查看完整描述

1 回答

  • 1 回答
  • 0 關(guān)注
  • 167 瀏覽

添加回答

舉報(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)