1 回答

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
a := make(chan int, 10)
b := make(chan int, 10)
c := make(chan string, 10)
go func() {
for {
rand.Seed(time.Now().UnixNano())
a <- rand.Intn(101)
time.Sleep(time.Millisecond * 100)
}
}()
go func() {
for {
rand.Seed(time.Now().UnixNano())
b <- rand.Intn(101)
time.Sleep(time.Millisecond * 300)
}
}()
go func() {
for {
select {
case ai := <-a:
bi := <-b
sum := ai + bi
c <- fmt.Sprintf("%d + %d = %d", ai, bi, sum)
}
}
}()
sums := 0
for val := range c {
if sums == 10 {
close(c)
close(b)
close(a)
}
println(val)
sums++
}
}
出于測(cè)試目的,我將秒更改為毫秒,而不是 100 個(gè)和,我驗(yàn)證了 10 個(gè),但你明白了。
額外信息:通道 A 和通道 B 必須緩沖 100 個(gè)項(xiàng)目。同樣,出于測(cè)試目的,我在這里只放了 10 個(gè)。
我時(shí)不時(shí)地收到死鎖,我明白為什么。我的問(wèn)題是,我不明白如何從接收通道關(guān)閉兩個(gè)發(fā)送通道。任何人都可以解決這個(gè)謎團(tuán)并向我解釋一下。
- 1 回答
- 0 關(guān)注
- 93 瀏覽
添加回答
舉報(bào)