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

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

在完成時(shí)將頻道結(jié)果添加到隊(duì)列的更慣用的方法

在完成時(shí)將頻道結(jié)果添加到隊(duì)列的更慣用的方法

Go
BIG陽(yáng) 2021-04-10 14:15:13
因此,現(xiàn)在,我只需將指針傳遞給Queue對(duì)象(實(shí)現(xiàn)并不重要),然后queue.add(result)在應(yīng)將事物添加到隊(duì)列的goroutine的末尾調(diào)用。我需要相同的功能-當(dāng)然,與簡(jiǎn)單的隊(duì)列添加函數(shù)調(diào)用相比,就性能而言,使用逗號(hào)ok語(yǔ)法進(jìn)行循環(huán)檢查完成情況是不可接受的。有沒有辦法更好地做到這一點(diǎn)?
查看完整描述

1 回答

?
縹緲止盈

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

您的問(wèn)題實(shí)際上有兩部分:如何在Go中排隊(duì)數(shù)據(jù),以及如何在不阻塞的情況下使用通道。


對(duì)于第一部分,聽起來(lái)您需要做的是代替使用通道將內(nèi)容添加到隊(duì)列中,而是將通道用作隊(duì)列。例如:


var (

    ch = make(chan int) // You can add an int parameter to this make call to create a buffered channel


    // Do not buffer these channels!

    gFinished = make(chan bool)

    processFinished = make(chan bool)

)

func f() {

    go g()

    for {

        // send values over ch here...

    }

    <-gFinished

    close(ch)

}

func g() {

    // create more expensive objects...

    gFinished <- true

}

func processObjects() {

    for val := range ch {

        // Process each val here

    }

    processFinished <- true

}

func main() {

    go processObjects()

    f()

    <-processFinished

}

至于如何使其更具異步性,您可以(如cthom06所指出的那樣)將第二個(gè)整數(shù)傳遞給第二行中的make調(diào)用,這將使發(fā)送操作異步進(jìn)行,直到通道的緩沖區(qū)已滿。


編輯:但是(如cthom06也指出),因?yàn)槟袃蓚€(gè)寫入通道的goroutine,所以其中之一必須負(fù)責(zé)關(guān)閉通道。另外,我的上一個(gè)修訂版本將在processObjects完成之前退出。我選擇同步goroutine的方式是通過(guò)創(chuàng)建幾個(gè)通過(guò)偽值傳遞的通道,以確保清理正確完成。這些通道沒有特別緩沖,因此發(fā)送以鎖定步驟進(jìn)行。


查看完整回答
反對(duì) 回復(fù) 2021-04-26
  • 1 回答
  • 0 關(guān)注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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