欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go語(yǔ)言實(shí)現(xiàn)兩個(gè)協(xié)程交替打印

 更新時(shí)間:2022年03月24日 15:43:11   作者:CJ-cooper  
這篇文章主要介紹了go語(yǔ)言實(shí)現(xiàn)兩個(gè)協(xié)程交替打印,文章主要分享了兩種方法使用兩個(gè)channel和使用一個(gè)channel,內(nèi)容介紹詳細(xì)具有一定的參考價(jià)值,需要的小伙伴可以參考一下

方法一:使用兩個(gè)channel

這里channel CA 必須要有緩沖區(qū),否則最后會(huì)報(bào)錯(cuò) fatal error: all goroutines are asleep - deadlock!

這是因?yàn)闊o(wú)緩沖的通道只有在有接收方能夠接收值的時(shí)候才能發(fā)送成功,否則會(huì)一直處于等待發(fā)送的階段。因?yàn)樽詈蠼惶孢\(yùn)行完后沒(méi)有協(xié)程可以接收CA通道中的數(shù)據(jù),所以會(huì)一直阻塞發(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()

}

方法二:使用一個(gè)channel

使用無(wú)緩沖的channel,使兩個(gè)協(xié)程同步,按照相同的步調(diào)執(zhí)行,但因?yàn)橐惶娲蛴∷圆荒苊看瓮胶蠖即蛴。屧撦敵龅膮f(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語(yǔ)言實(shí)現(xiàn)兩個(gè)協(xié)程交替打印的文章就介紹到這了,更多相關(guān)go協(xié)程交替打印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論