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

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

Go 中的簡(jiǎn)單通道的競(jìng)爭(zhēng)條件?

Go 中的簡(jiǎn)單通道的競(jìng)爭(zhēng)條件?

Go
動(dòng)漫人物 2021-07-10 16:03:21
我是 Go 的新手,并且對(duì)在帶有 Go 1.2 版的 Linux 上運(yùn)行的一小塊代碼似乎有點(diǎn)罕見(jiàn)的競(jìng)爭(zhēng)條件感到困惑?;旧?,我為 an 創(chuàng)建一個(gè)通道int,啟動(dòng)一個(gè) go 例程從該通道讀取,然后將單個(gè) int 寫(xiě)入該通道。package mainimport "fmt"func main() {    channel := make(chan int)    go func() {        number := <- channel        fmt.Printf("GOT IT: %d\n", number)    }()    fmt.Println("[+] putting num on channel")    channel <- 42    fmt.Println("[-] putting num on channel")}大約 90% 的時(shí)間輸出符合預(yù)期:$ go run test.go [+] putting num on channelGOT IT: 42[-] putting num on channel然而,大約有 10% 的時(shí)間,go 例程不會(huì)從通道中讀取數(shù)字并且不打印任何內(nèi)容:$ go run test.go [+] putting num on channel[-] putting num on channel我很困惑,因?yàn)檫@段代碼與https://gobyexample.com/channels上的示例非常相似,(我沒(méi)有這個(gè)問(wèn)題),除了我在 go 例程中從通道讀取而不是編寫(xiě)到頻道。我是否對(duì)渠道的工作方式有根本的誤解,或者這里還有其他東西在起作用嗎?
查看完整描述

3 回答

?
桃花長(zhǎng)相依

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

您似乎希望接收 goroutine 在第二個(gè)fmt.Println執(zhí)行之前運(yùn)行完成。不能保證情況如此。如果程序終止,goroutine 不能保證到達(dá)其函數(shù)的末尾。


當(dāng)你看到?jīng)]有顯示“GOT IT”消息的輸出時(shí),通道傳遞了它的消息,但main函數(shù)在 goroutine 之前完成。程序終止,goroutine 永遠(yuǎn)沒(méi)有機(jī)會(huì)調(diào)用fmt.Printf


在您引用的示例中,該main函數(shù)以以下內(nèi)容結(jié)尾:


go func() { messages <- "ping" }()

msg := <-messages

fmt.Println(msg)

由于main函數(shù)在收到消息之前會(huì)阻塞,因此在這個(gè)例子中 goroutine 總是運(yùn)行到完成。在您的代碼中,您的 goroutine 在從通道接收后執(zhí)行一個(gè)步驟,并且未定義 goroutine 或 main 函數(shù)是否會(huì)在接收后執(zhí)行下一行。


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