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

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

緩沖/非緩沖通道

緩沖/非緩沖通道

Go
Qyouu 2021-06-23 17:13:06
有人可以解釋一下,為什么如果通道被緩沖,程序不會以致命錯誤退出?無緩沖通道package mainfunc main() {    c := make(chan int)    c <- 3}fatal error: all goroutines are asleep - deadlock!緩沖通道package mainfunc main() {    c := make(chan int, 1)    c <- 3}[no output]Program exited.謝謝!
查看完整描述

2 回答

?
開心每一天1111

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

如果緩沖區(qū)中有空間,則寫入緩沖通道不會阻塞。


如果您嘗試將緩沖區(qū)大小為 1 的兩個項目放入通道中,則會出現(xiàn)相同的錯誤:


package main


func main() {

    c := make(chan int, 1)

    c <- 3

    c <- 4

}

給你:


fatal error: all goroutines are asleep - deadlock!


查看完整回答
反對 回復(fù) 2021-07-19
?
BIG陽

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊

這是 Go 通道(或其他CSP實現(xiàn),如 Clojure 的core.async庫)的核心概念,它們被阻塞。一般來說,正如您已經(jīng)提到的,有兩種類型的渠道:


如果緩沖區(qū)已滿,則緩沖哪個塊。

如果沒有“集合點(diǎn)”,則無緩沖哪個塊,即必須有人將 ( c <-)放入<- c頻道,有人從頻道中取出 ( )。

在您的特定情況下,Go 運(yùn)行時足夠智能,可以檢測到?jīng)]有人會3從 channel 中獲取c。因此,這是一個死鎖,并且(謝天謝地)拋出了一個錯誤。


當(dāng)你使用通道時,你通常做的是使用goroutines(查看這個介紹),它產(chǎn)生一個輕量級線程——由 Go 運(yùn)行時管理——來并發(fā)執(zhí)行主體:


c := make(chan int)


go func() { c <- 3 }() // Create a new gorountine that puts 3 to the channel


fmt.Println(<- c) // Take 3 from the channel and print it in the main thread


查看完整回答
反對 回復(fù) 2021-07-19
  • 2 回答
  • 0 關(guān)注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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