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

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

使用 goroutine 時(shí)出現(xiàn)死鎖

使用 goroutine 時(shí)出現(xiàn)死鎖

Go
慕無(wú)忌1623718 2023-02-14 18:02:14
我有一個(gè)程序可以做兩件事:讀取日志條目并創(chuàng)建logEntry對(duì)象處理每個(gè)logEntry實(shí)例在這里,讀取由單獨(dú)的 goroutine 完成,所有讀取條目的處理由單個(gè) goroutine 完成。我正在使用等待組——wg確保在程序退出之前讀取所有日志條目,并使用信號(hào)通道——done確保日志條目的處理完成。等待組按預(yù)期工作,但是當(dāng)我調(diào)用<-done以確保程序僅在處理讀取的日志文件后退出時(shí),它會(huì)拋出錯(cuò)誤fatal error: all goroutines are asleep - deadlock!。有人可以解釋為什么會(huì)發(fā)生這種情況以及如何解決上述錯(cuò)誤嗎?
查看完整描述

1 回答

?
肥皂起泡泡

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

在你的情況下,你正在聽(tīng)linesChan,但沒(méi)有關(guān)閉它。當(dāng)所有數(shù)據(jù)都通過(guò)時(shí),您需要關(guān)閉此通道。done <- true不會(huì)被執(zhí)行。


但是這里不需要同步頻道,sync.WaitGroup{}就足夠了。


package main


import (

    "fmt"

    "sync"

    "time"

)


type logEntry struct {

    lines      []string

    created_at string

    line_count int

}


var wg sync.WaitGroup


func main() {

    linesChan := make(chan (logEntry))


    // Process entries from lines

    go func() {

        for c := range linesChan {

            time.Sleep(100 * time.Millisecond)

            fmt.Printf("%v\n", c)

        }

    }()


    // Read lines

    for i := 1; i <= 10; i++ {

        wg.Add(1)

        go func(i int, linesChan chan (logEntry)) {

            read(i, linesChan)

        }(i, linesChan)

    }


    // Wait till all the files are read

    wg.Wait()

}


func read(count int, channel chan (logEntry)) {

    fmt.Println(count, "read")

    channel <- logEntry{

        line_count: count,

    }

    wg.Done()

}


查看完整回答
反對(duì) 回復(fù) 2023-02-14
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專(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)