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

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

golang chanel 無法與 sync.WaitGroup 一起使用

golang chanel 無法與 sync.WaitGroup 一起使用

Go
肥皂起泡泡 2022-06-27 15:58:46
我的代碼package mainimport (   "fmt"   "sync")func other(c chan int, wg *sync.WaitGroup) {   c <- 455   wg.Done()}func addInt(c chan int, d int, wg *sync.WaitGroup) {   c <- d   wg.Done()}func main() {   var wg sync.WaitGroup   myChanel := make(chan int)   wg.Add(2)   go addInt(myChanel, 5, &wg)   go other(myChanel, &wg)   wg.Wait()   c := 0   for v := range myChanel {       if c == 1 {           close(myChanel)       }       fmt.Println(v)       c++   }}我正在學(xué)習(xí) golang 看地雷,但我確實(shí)遇到了這樣的錯誤。我查看了其他來源。我無法找到健康的解決方案。我再次嘗試關(guān)閉(香奈兒)。錯誤輸出fatal error: all goroutines are asleep - deadlock!goroutine 1 [semacquire]:sync.runtime_Semacquire(0xc0000140f8)        /usr/lib/go-1.13/src/runtime/sema.go:56 +0x42sync.(*WaitGroup).Wait(0xc0000140f0)        /usr/lib/go-1.13/src/sync/waitgroup.go:130 +0x64main.main()        /home/zeus/go/src/github.com/awesomeProject/pool.go:27 +0xe4goroutine 6 [chan send]:main.addInt(0xc000016120, 0x5, 0xc0000140f0)        /home/zeus/go/src/github.com/awesomeProject/pool.go:14 +0x3fcreated by main.main        /home/zeus/go/src/github.com/awesomeProject/pool.go:24 +0xaagoroutine 7 [chan send]:main.other(0xc000016120, 0xc0000140f0)        /home/zeus/go/src/github.com/awesomeProject/pool.go:9 +0x37created by main.main        /home/zeus/go/src/github.com/awesomeProject/pool.go:25 +0xd6exit status 2
查看完整描述

2 回答

?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個贊

你有一個無緩沖的通道,這意味著你不能在它上面發(fā)送,直到有東西等待接收。

所以當(dāng)你這樣做時:

wg.Wait()

在你做之前

for v := range myChanel

您將永遠(yuǎn)無法到達(dá)接收器。

無論如何,在使用無緩沖通道時,我從來不需要使用等待組,根據(jù)我的經(jīng)驗(yàn),您只需要在沒有通道的情況下進(jìn)行并發(fā)處理時才需要它們。你可以這樣做:https: //play.golang.org/p/-SUuXGlFd1E


查看完整回答
反對 回復(fù) 2022-06-27
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個贊

我解決了


運(yùn)行


package main


import (

    "fmt"

    "sync"

    "time"

)


func other(c chan int, wg *sync.WaitGroup) {

    time.Sleep(time.Second*1)

    c <- 455

    wg.Done()

}


func addInt(c chan int, d int, wg *sync.WaitGroup) {

    c <- d

    wg.Done()

}

func main() {


    var wg sync.WaitGroup

    myChanel := make(chan int)


    wg.Add(2)


    go addInt(myChanel, 5, &wg)

    go other(myChanel, &wg)


    go func() {

        wg.Wait()

        close(myChanel)

    }()


    for v := range myChanel {

        fmt.Println(v)

    }


}


查看完整回答
反對 回復(fù) 2022-06-27
  • 2 回答
  • 0 關(guān)注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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