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

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

使用等待組的并發(fā)性

使用等待組的并發(fā)性

Go
慕村225694 2022-09-19 17:25:56
我是Go語(yǔ)言的新手,正在尋找一些關(guān)于并發(fā)模型的幫助。假設(shè)我想同時(shí)進(jìn)行2個(gè)http調(diào)用,并等待它們都完成,然后處理/合并響應(yīng)數(shù)據(jù)。這是我的代碼func main() {    var wg sync.WaitGroup    wg.Add(2)    c1 := make(chan string)    c2 := make(chan string)    go foo(c1, &wg)    go bar(c2, &wg)    wg.Wait()    foo := <-c1    bar := <-c2    fmt.Println("foo: ", foo)    fmt.Println("bar: ", bar)}func foo(c chan string, wg *sync.WaitGroup) {    defer wg.Done()    c <- "foo"}func bar(c chan string, wg *sync.WaitGroup) {    defer wg.Done()    c <- "bar"}但是,當(dāng)我運(yùn)行它時(shí),它給出了錯(cuò)誤fatal error: all goroutines are asleep - deadlock!我可以在沒(méi)有WaitGroup的情況下讓它工作,但只是好奇為什么這會(huì)陷入僵局,以及最好的方法是什么?
查看完整描述

3 回答

?
富國(guó)滬深

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

大流子流器將阻止等待寫(xiě)入通道,因?yàn)橥ǖ雷x取發(fā)生在大流子流結(jié)束之后(在wg.完成),因此出現(xiàn)死鎖。

這里的簡(jiǎn)單解決方案是擺脫等待組。通道讀取操作將阻塞,直到 goroutine 寫(xiě)入通道,因此在讀取兩個(gè)通道后,無(wú)需等待。


查看完整回答
反對(duì) 回復(fù) 2022-09-19
?
ABOUTYOU

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

事實(shí)上,這里并不是真的需要等待小組。但是,如果您想繼續(xù)試驗(yàn)戈魯丁和通道,那么您也可以嘗試使通道緩沖,例如:

c1 := make(chan string, 1)
c2 := make(chan string, 1)

然后發(fā)生的事情是,您可以為每個(gè)通道寫(xiě)入單個(gè)條目而不會(huì)阻塞。


查看完整回答
反對(duì) 回復(fù) 2022-09-19
?
慕工程0101907

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

讀取/寫(xiě)入無(wú)緩沖通道是阻塞調(diào)用,這意味著這些行:

c <- "foo"
c <- "bar"

將掛起,直到您到達(dá)從通道中提取值的調(diào)用,即這些行:

foo := <-c1
bar := <-c2

死鎖的原因是在這兩行之前調(diào)用。為了移動(dòng)過(guò)去,所有等待組必須完成,但您的等待組不能完成,因?yàn)楸煌七t到/取消阻止。如前所述,在到達(dá) / 之前,無(wú)法取消阻止這些內(nèi)容,并且由于 .你可以看到怎么可能沒(méi)有進(jìn)展,因此僵局。wg.Wait()wg.Wait()wg.Done()c <- "foo"c <- "bar"foo := <-c1bar := <-c2wg.Wait()

最佳做法是避免使用等待組和互斥鎖,直到絕對(duì)必要。通常,(就像在這種情況下)解決方案在純Go中是可能的,這些包只會(huì)使代碼復(fù)雜化。


查看完整回答
反對(duì) 回復(fù) 2022-09-19
  • 3 回答
  • 0 關(guān)注
  • 88 瀏覽
慕課專(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)