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

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

帶通道的 WaitGroup

帶通道的 WaitGroup

Go
LEATH 2023-08-07 14:28:07
我一直在研究這個(gè)并想出了:type Function struct{? ? Function func(*TaskGroup, []interface{})? ? Args []interface{}}type TaskGroup struct{? ? Group sync.WaitGroup? ? Functions []Function}func (x *TaskGroup) Start() {? ? for _, Function := range x.Functions{? ? ? ? x.Group.Add(1)? ? ? ? go Function.Function(x, Function.Args)? ? }? ? x.Group.Wait()}為了更輕松地使用多個(gè)功能,我必須等待。以下測(cè)試將起作用,我不明白為什么:func auxC(x *TaskGroup, args []interface{}){? ? defer x.Group.Done()? ? messageOut := args[0].(chan string)? ? messageOut <- "TestC"}func auxD(x *TaskGroup, args []interface{}){? ? defer x.Group.Done()? ? messageOut := args[0].(chan string)? ? messageOut <- "TestD"}func TestTaskGroupBaseB(t *testing.T) {? ? messageC := make(chan string, 1)? ? messageD := make(chan string, 1)? ? tg := TaskGroup{? ? ? ? Functions: []Function{? ? ? ? ? ? {auxC, []interface{}{messageC}},? ? ? ? ? ? {auxD, []interface{}{messageD}},? ? ? ? },? ? }? ? tg.Start()? ? fmt.Println(<- messageC)? ? fmt.Println(<- messageD)? ? time.Sleep(100 * time.Millisecond)}我首先嘗試使用像這樣的無(wú)緩沖通道:messageC := make(chan string)messageD := make(chan string)但它不起作用,它只是永遠(yuǎn)卡住而不做任何事情,所以我有幾個(gè)問(wèn)題:為什么大小為 1 的緩沖通道可以工作,而無(wú)緩沖通道則不能?默認(rèn)大小不是無(wú)緩沖1嗎?重構(gòu)代碼,見(jiàn)注釋:主要/測(cè)試:func auxC(args []interface{}){? ? messageOut := args[0].(chan string)? ? messageOut <- "TestC"}func auxD(args []interface{}){? ? messageOut := args[0].(chan string)? ? messageOut <- "TestD"}func TestTaskGroupBaseB(t *testing.T) {? ? messageC := make(chan string,1)? ? messageD := make(chan string,1)? ? tg := TaskGroup{? ? ? ? Functions: []Function{? ? ? ? ? ? {auxC, []interface{}{messageC}},? ? ? ? ? ? {auxD, []interface{}{messageD}},? ? ? ? },? ? }? ? tg.Wait()? ? fmt.Println(<- messageC)? ? fmt.Println(<- messageD)? ? time.Sleep(100 * time.Millisecond)}任務(wù)組:type Function struct{? ? Function func([]interface{})? ? Args []interface{}}type TaskGroup struct{? ? Group sync.WaitGroup? ? Functions []Function
查看完整描述

1 回答

?
Cats萌萌

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

使用緩沖區(qū)大小為 1 的通道,首先寫(xiě)入緩沖區(qū)數(shù)據(jù),然后 goroutine 結(jié)束,您可以在主 goroutine 中讀取緩沖數(shù)據(jù)。

當(dāng)通道大小為零時(shí),對(duì)通道的寫(xiě)入會(huì)阻塞,直到另一個(gè) goroutine 從中讀取。所以你的兩個(gè) goroutine 都在等待寫(xiě)入通道。如果在通道讀入 main 之后移動(dòng) Wait() 調(diào)用,它應(yīng)該可以工作。


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

添加回答

舉報(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)