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

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

具有多個(gè)通道的多個(gè) goroutine 的死鎖

具有多個(gè)通道的多個(gè) goroutine 的死鎖

Go
翻閱古今 2023-05-08 14:27:31
我正在開(kāi)發(fā)一個(gè)示例程序,使用具有多個(gè)通道的 goroutine 打印 1 到 100 之間的奇數(shù)和和偶數(shù)和。你可以找到我的代碼這里輸出sum of even number = 2550sum of odd number = 2500fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.print(0x434100, 0x11db7c)    /tmp/sandbox052575152/main.go:18 +0xc0main.main()    /tmp/sandbox052575152/main.go:14 +0x120該代碼有效但存在死鎖。我不確定我的代碼有什么問(wèn)題
查看完整描述

1 回答

?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

我們可以遍歷通過(guò)通道發(fā)送的值。要打破這種迭代通道,需要明確關(guān)閉。否則 range 將以與 nil 通道相同的方式永遠(yuǎn)阻塞。在您的代碼中,您沒(méi)有關(guān)閉sum(打印功能sumValues通道)通道。這就是為什么以下功能將永遠(yuǎn)被阻止的原因。


func print(sumValues <-chan string ){

    for val := range sumValues {

        fmt.Println(val)

    }

}

所以你必須在函數(shù)sum中的doSum所有 go 例程doSum完成后關(guān)閉函數(shù)中的通道(否則sum通道可能會(huì)在 go 例程完成之前關(guān)閉)。你可以用sync.WaitGroup它來(lái)做到這一點(diǎn)。請(qǐng)參閱下面的更新doSum功能:


func doSum(sum chan<- string, oddChan <-chan int, evenChan <-chan int) {

    var waitGroup sync.WaitGroup


    waitGroup.Add(2) // Must wait for 2 calls to 'done' before moving on


    go func(sum chan<- string) {

        s1 := 0

        for val := range oddChan {

            s1 += val

        }

        sum <- fmt.Sprint("sum of odd number = ", s1)

        waitGroup.Done()

    }(sum)


    go func(sum chan<- string) {

        s1 := 0

        for val := range evenChan {

            s1 += val

        }

        sum <- fmt.Sprint("sum of even number = ", s1)

        waitGroup.Done()

    }(sum)


    // Waiting for all goroutines to exit

    waitGroup.Wait()


    // all goroutines are complete now close the sum channel

    close(sum)

}


查看完整回答
反對(duì) 回復(fù) 2023-05-08
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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