go語言實現(xiàn)兩個協(xié)程交替打印
方法一:使用兩個channel
這里channel CA
必須要有緩沖區(qū),否則最后會報錯 fatal error: all goroutines are asleep - deadlock!
這是因為無緩沖的通道只有在有接收方能夠接收值的時候才能發(fā)送成功,否則會一直處于等待發(fā)送的階段。因為最后交替運行完后沒有協(xié)程可以接收CA通道中的數(shù)據(jù),所以會一直阻塞發(fā)生死鎖
package main import ( ?? ?"fmt" ?? ?"sync" ) var wg sync.WaitGroup var CA chan int var CB chan int func main(){ ?? ?wg = sync.WaitGroup{} ?? ?CA = make(chan int,1) ?? ?CB = make(chan int) ?? ?wg.Add(2) ?? ?go A() ?? ?go B() ?? ?CA<-1 ?? ?wg.Wait() } func A(){ ?? ?for i:=0;i<5;i++{ ?? ??? ?<-CA ?? ??? ?fmt.Println(2*i) ?? ??? ?CB<-1 ?? ?} ?? ?wg.Done() } func B(){ ?? ?for i:=0;i<5;i++{ ?? ??? ?<-CB ?? ??? ?fmt.Println(2*i+1) ?? ??? ?CA<-1 ?? ?} ?? ?wg.Done() }
方法二:使用一個channel
使用無緩沖的channel
,使兩個協(xié)程同步,按照相同的步調(diào)執(zhí)行,但因為要交替打印所以不能每次同步后都打印,要讓該輸出的協(xié)程輸出,不該輸出的協(xié)程不輸出
package main import ( ? ?"fmt" ? ?"sync" ) var wg sync.WaitGroup var CA chan int func main(){ ? ?wg = sync.WaitGroup{} ? ?CA = make(chan int) ? ?wg.Add(2) ? ?go A() ? ?go B() ? ?wg.Wait() } func A(){ ? ?for i:=0;i<10;i++{ ? ? ? CA<-1 ? ? ? if i%2 == 0{ ? ? ? ? ?fmt.Println(i) ? ? ? } ? ?} ? ?wg.Done() } func B(){ ? ?for i:=0;i<10;i++{ ? ? ? <-CA ? ? ? if i%2 == 1{ ? ? ? ? ?fmt.Println(i) ? ? ? } ? ?} ? ?wg.Done() }
到此這篇關(guān)于go語言實現(xiàn)兩個協(xié)程交替打印的文章就介紹到這了,更多相關(guān)go協(xié)程交替打印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Prometheus Go client library使用方式詳解
這篇文章主要為大家介紹了Prometheus Go client library使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11Go處理json數(shù)據(jù)方法詳解(Marshal,UnMarshal)
這篇文章主要介紹了Go處理json數(shù)據(jù)的方法詳解,Marshal(),UnMarshal(),需要的朋友可以參考下2022-04-04如何控制Go編碼JSON數(shù)據(jù)時的行為(問題及解決方案)
今天來聊一下我在Go中對數(shù)據(jù)進行 JSON 編碼時遇到次數(shù)最多的三個問題以及解決方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2020-02-02go使用consul實現(xiàn)服務(wù)發(fā)現(xiàn)及配置共享實現(xiàn)詳解
這篇文章主要為大家介紹了go使用consul實現(xiàn)服務(wù)發(fā)現(xiàn)及配置共享實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05基于Golang實現(xiàn)Excel表格的導(dǎo)入導(dǎo)出功能
最近項目開發(fā)中有涉及到Excel的導(dǎo)入與導(dǎo)出功能,特別是導(dǎo)出表格時需要特定的格式,所以本文給大家介紹了基于Golang實現(xiàn)Excel表格的導(dǎo)入導(dǎo)出功能,文中通過代碼示例和圖文介紹的非常詳細,需要的朋友可以參考下2023-12-12淺析go中Ticker,Timer和Tick的用法與區(qū)別
在go面試的時候,面試官經(jīng)常會問time包的Ticker,Timer以及Tick的區(qū)別,一般在超時控制的時候用的比較多,今天就跟隨小編一起來詳細學(xué)一下這幾個的區(qū)別吧2023-10-10