sync synchronization同步
WaitGroup,同步等待組怀愧。
在類型上侨颈,它是一個(gè)結(jié)構(gòu)體余赢。
WaitGroup的用途是等待一個(gè)goroutine的集合執(zhí)行完成。主goroutine調(diào)用了Add()方法來設(shè)置要等待的goroutine的數(shù)量哈垢。然后妻柒,每個(gè)goroutine都會(huì)執(zhí)行并且執(zhí)行完成后調(diào)用Done()這個(gè)方法。與此同時(shí)耘分,可以使用Wait()方法來阻塞举塔,直到所有的goroutine都執(zhí)行完成。
例如:用來防止出現(xiàn)主goroutine都執(zhí)行完成了求泰,而其它goroutine還未執(zhí)行完成的情況
WaitGroup?對(duì)象內(nèi)部有一個(gè)計(jì)數(shù)器啤贩,最初從0開始,它有三個(gè)方法:Add(), Done(), Wait()?用來控制計(jì)數(shù)器的數(shù)量拜秧。Add(n)?把計(jì)數(shù)器設(shè)置為n?,Done()?每次把計(jì)數(shù)器-1?章郁,wait()?會(huì)阻塞代碼的運(yùn)行枉氮,直到計(jì)數(shù)器地值減為0。
Add()方法:
Add這個(gè)方法暖庄,用來設(shè)置到WaitGroup的計(jì)數(shù)器的值聊替。我們可以理解為每個(gè)waitgroup中都有一個(gè)計(jì)數(shù)器用來表示這個(gè)同步等待組中要執(zhí)行的goroutin的數(shù)量。
如果計(jì)數(shù)器的數(shù)值變?yōu)?培廓,那么就表示等待時(shí)被阻塞的goroutine都被釋放惹悄,如果計(jì)數(shù)器的數(shù)值為負(fù)數(shù),程序就報(bào)錯(cuò)了肩钠。
Done()方法
Done()方法泣港,就是當(dāng)WaitGroup同步等待組中的某個(gè)goroutine執(zhí)行完畢后,設(shè)置這個(gè)WaitGroup的counter數(shù)值減1价匠。
Wait()方法
Wait()方法当纱,表示讓當(dāng)前的goroutine等待,進(jìn)入阻塞狀態(tài)踩窖。一直到WaitGroup的計(jì)數(shù)器為零坡氯。才能解除阻塞,這個(gè)goroutine才能繼續(xù)執(zhí)行洋腮。