我需要幫助來理解為什么以下代碼不起作用。我正在構(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 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報(bào)
0/150
提交
取消