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

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

理解 Go 中的死鎖

理解 Go 中的死鎖

Go
Smart貓小萌 2022-05-10 13:37:55
我從編程課程中給出的示例中摘錄了以下摘錄,我不確定為什么會發(fā)生死鎖。package mainimport (    "fmt")var (    Count      int = 0    nFunctions int = 2)var sema = make(chan int)func increment(ch chan int, nSteps int) {    for i := 0; i < nSteps; i++ {        <- sema          cnt := Count        Count = cnt + 1        ch <- 1        sema <- 1    }    return}func main() {    ch := make(chan int)    sema <- 1    go increment(ch, 1000)    go increment(ch, 1000)    for i := 0; i < nFunctions*1000; i++ {        <-ch    }    fmt.Printf("Count = %d\n", Count)}奇怪的是,當我將語句從主要更改sema <- 1為go func () {sema <- 1}()對此的任何解釋都非常感謝。錯誤消息是:致命錯誤:所有 goroutine 都處于睡眠狀態(tài) - 死鎖!goroutine 1 [chan 發(fā)送]: main.main()
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經(jīng)驗 獲得超7個贊

通道阻塞發(fā)送者和接收者。如果您發(fā)送某些東西,您將被阻止,直到收到為止。您可以進一步減少代碼,您只需要一個通道,然后寫入該通道。請注意,您還可以使用緩沖通道,它允許寫入到緩沖區(qū)長度而不會阻塞。但是,如果緩沖區(qū)已滿,它仍然會阻塞。



查看完整回答
反對 回復 2022-05-10
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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