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

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

使用渠道下單

使用渠道下單

Go
湖上湖 2023-07-31 15:25:02
我從 Go 旅游中有這個(gè)代碼:func sum(s []int, c chan int) {    sum := 0    for _, v := range s {        sum += v    }    fmt.Printf("Sending %d to chan\n", sum)    c <- sum // send sum to c}func main() {    s := []int{2, 8, -9, 4, 0, 99}    c := make(chan int)    go sum(s[len(s)/2:], c)    go sum(s[:len(s)/2], c)    x, y := <-c, <-c // receive from c    fmt.Println(x, y, x+y)}產(chǎn)生以下輸出:Sending 1 to chanSending 103 to chan1 103 104在此,x 獲得第二個(gè)總和,y 獲得第一個(gè)總和。為什么順序顛倒了?
查看完整描述

3 回答

?
慕桂英4014372

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

類似于goroutine 的執(zhí)行順序

如果多次運(yùn)行,可能會(huì)得到不同的結(jié)果。當(dāng)我運(yùn)行這個(gè)時(shí),我得到:


Sending 103 to chan

Sending 1 to chan

103 1 104

如果你希望結(jié)果是確定性的。您可以使用兩個(gè)渠道:


func main() {

? ? s := []int{2, 8, -9, 4, 0, 99}


? ? c1 := make(chan int)

? ? c2 := make(chan int)

? ? go sum(s[len(s)/2:], c1)

? ? go sum(s[:len(s)/2], c2)


? ? x, y := <-c1, <-c2 // receive from c


? ? fmt.Println(x, y, x+y)

}


查看完整回答
反對(duì) 回復(fù) 2023-07-31
?
千巷貓影

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

goroutine 的執(zhí)行順序沒(méi)有保證。當(dāng)您啟動(dòng)多個(gè) goroutine 時(shí),它們可能會(huì)也可能不會(huì)按照您期望的順序執(zhí)行,除非它們之間存在顯式同步,例如通道或其他同步原語(yǔ)。

在你的例子中,第二個(gè) goroutine 在第一個(gè) goroutine 之前寫入通道,因?yàn)闆](méi)有機(jī)制來(lái)強(qiáng)制兩個(gè) goroutine 之間的排序。


查看完整回答
反對(duì) 回復(fù) 2023-07-31
?
楊__羊羊

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

golang規(guī)范關(guān)于通道的說(shuō)明:

通道充當(dāng)先進(jìn)先出隊(duì)列。例如,如果一個(gè) Goroutine 在通道上發(fā)送值,而第二個(gè) Goroutine 接收它們,則這些值將按照發(fā)送的順序接收。

如果將上述語(yǔ)句與 goroutine 執(zhí)行的任意順序結(jié)合起來(lái),可能會(huì)導(dǎo)致將項(xiàng)目排隊(duì)到通道中的任意順序。

查看完整回答
反對(duì) 回復(fù) 2023-07-31
  • 3 回答
  • 0 關(guān)注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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