日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

php小編小新在go語言中,通道是一種用于在goroutine之間傳遞數(shù)據(jù)的機制。通道的行為取決于消息發(fā)送到它的方式。當(dāng)通道被聲明為有緩沖的時候,發(fā)送消息的goroutine會將消息放入通道的緩沖區(qū),然后繼續(xù)執(zhí)行。而當(dāng)通道被聲明為無緩沖的時候,發(fā)送消息的goroutine會阻塞,直到有其他goroutine從通道中接收消息。因此,可以說通道的行為會根據(jù)消息發(fā)送到它的方式而改變。

問題內(nèi)容

為什么這兩段代碼的執(zhí)行方式不同?

    運行以下代碼會返回 fatal 錯誤:所有 goroutine 都在休眠 - 死鎖!error。
func main() {
    ch := make(chan int)
    ch <- 1
    fmt.println(<-ch)
}

登錄后復(fù)制

    正確運行以下代碼會返回 2 和 3(各占一行)。
ch := make(chan int)
    go buffer(ch)
    fmt.Println(<-ch)
    fmt.Println(<-ch)
}

func buffer(ch chan int) {
    ch <- 2
    ch <- 3
}

登錄后復(fù)制

僅當(dāng) ch 被定義為緩沖通道時,#1 才能正確執(zhí)行。為什么?為什么 buffer() 中的 ch 接受 2 個值而不抱怨?

解決方法

對無緩沖通道的發(fā)送操作將阻塞,直到另一個 goroutine 從中讀取數(shù)據(jù)。這就是第一段代碼死鎖的原因:當(dāng)您發(fā)送到通道時,沒有其他 goroutine 從中讀取。

在第二種情況下,您有一個 goroutine 向通道發(fā)送兩個值,并且主 goroutine 在發(fā)送的同時從通道讀取兩次。該通道不接受兩次發(fā)送,而是一個接一個地進行,第一個發(fā)送操作由第一次讀取解除阻塞,第二個發(fā)送操作由第二次讀取解除阻塞。

分享到:
標(biāo)簽:Go語言
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定