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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

并發(fā)問題 - 在兩個通道上發(fā)送 INT 流 - 從一個通道讀取

并發(fā)問題 - 在兩個通道上發(fā)送 INT 流 - 從一個通道讀取

Go
千萬里不及你 2023-01-03 13:51:55
我應該實施什么:一個生成隨機 INT 并將它們放在一個通道上并在每次通道推送后暫停 1 秒的 go 例程(我們稱之為 A)。執(zhí)行相同操作的第二個 go 例程 (B)。將隨機 INT 放入通道 B 并暫停 2 秒?,F(xiàn)在,我必須從兩個通道讀取數(shù)據(jù),并創(chuàng)建一個 SUM。例如。來自通道 A 的第一個元素與來自通道 B 的第一個元素 - 求和并將其放入通道 C(依此類推 +1),直到創(chuàng)建 100 個和。完成 100 個總和后(放入通道 C 并讀?。? 關閉通道 A、通道 B 和通道 C。到目前為止我所擁有的:
查看完整描述

1 回答

?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

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++

    }


}


出于測試目的,我將秒更改為毫秒,而不是 100 個和,我驗證了 10 個,但你明白了。


額外信息:通道 A 和通道 B 必須緩沖 100 個項目。同樣,出于測試目的,我在這里只放了 10 個。


我時不時地收到死鎖,我明白為什么。我的問題是,我不明白如何從接收通道關閉兩個發(fā)送通道。任何人都可以解決這個謎團并向我解釋一下。


查看完整回答
反對 回復 2023-01-03
  • 1 回答
  • 0 關注
  • 84 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號