最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go語言實現(xiàn)兩個協(xié)程交替打印

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

方法一:使用兩個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é)程同步,按照相同的步調執(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()

}

到此這篇關于go語言實現(xiàn)兩個協(xié)程交替打印的文章就介紹到這了,更多相關go協(xié)程交替打印內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 對Go語言中的context包源碼分析

    對Go語言中的context包源碼分析

    這篇文章主要對Go語言中的context包源碼進行分析,context包析是1.15,context包定義了一個Context類型過這個Context接口類型,?就可以跨api邊界/跨進程傳遞一些值,下面我們就來對context包源碼進行分析,需要的小伙伴可以參考一下
    2022-02-02
  • 詳解Go語言如何實現(xiàn)二叉樹遍歷

    詳解Go語言如何實現(xiàn)二叉樹遍歷

    這篇文章主要為大家詳解介紹了Go語言中如何實現(xiàn)二叉樹遍歷,文中的示例代碼講解詳細,對我們學習Go語言有一定幫助,需要的可以參考一下
    2022-04-04
  • Golang 實現(xiàn)Socket服務端和客戶端使用TCP協(xié)議通訊

    Golang 實現(xiàn)Socket服務端和客戶端使用TCP協(xié)議通訊

    這篇文章主要介紹了Golang 實現(xiàn)Socket服務端和客戶端使用TCP協(xié)議通訊,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 詳解Golang如何監(jiān)聽某個函數(shù)的開始執(zhí)行和執(zhí)行結束

    詳解Golang如何監(jiān)聽某個函數(shù)的開始執(zhí)行和執(zhí)行結束

    這篇文章主要為大家詳細介紹了Golang如何監(jiān)聽某個函數(shù)的開始執(zhí)行和執(zhí)行結束,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-02-02
  • Golang?json?庫中的RawMessage功能原理

    Golang?json?庫中的RawMessage功能原理

    今天我們來學習一個 Golang 官方 json 庫提供了一個經(jīng)典能力RawMessage,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 快速升級Go版本(幾分鐘就搞定了)

    快速升級Go版本(幾分鐘就搞定了)

    go現(xiàn)在的更新速度是非常的快啊,用著用著網(wǎng)上的教程就不配套了,下面這篇文章主要給大家介紹了關于快速升級Go版本的相關資料,文中介紹的方法幾分鐘就搞定了,需要的朋友可以參考下
    2024-05-05
  • Go代碼檢查工具golangci-lint安裝使用方法

    Go代碼檢查工具golangci-lint安裝使用方法

    這篇文章主要給大家介紹了關于Go代碼檢查工具golangci-lint安裝使用的相關資料,golangci-lint用于許多開源項目中,比如kubernetes、Prometheus、TiDB等都使用golangci-lint用于代碼檢查,需要的朋友可以參考下
    2024-01-01
  • 用golang如何替換某個文件中的字符串

    用golang如何替換某個文件中的字符串

    這篇文章主要介紹了用golang實現(xiàn)替換某個文件中的字符串操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • go?colly?爬蟲實現(xiàn)示例

    go?colly?爬蟲實現(xiàn)示例

    這篇文章主要為大家介紹了go?colly?爬蟲實現(xiàn)示例,效果是根據(jù)輸入的瀏覽器cookie及excel必要行列號,從excel中讀取公司名稱,查詢公司法人及電話號碼。并寫回到excel中指定行
    2022-09-09
  • go語言實現(xiàn)屏幕截圖的示例代碼

    go語言實現(xiàn)屏幕截圖的示例代碼

    屏幕截圖在很多地方都可以 用到,本文主要介紹了go語言實現(xiàn)屏幕截圖的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論

六枝特区| 双牌县| 油尖旺区| 神木县| 定安县| 江华| 旬邑县| 北票市| 岑溪市| 且末县| 永清县| 女性| 万安县| 清涧县| 越西县| 磐石市| 项城市| 潞城市| 阿鲁科尔沁旗| 太康县| 包头市| 涿州市| 迁西县| 江陵县| 福泉市| 巴东县| 遵义县| 沙雅县| 当涂县| 文化| 丰镇市| 吉安市| 洪泽县| 灵石县| 雅江县| 本溪| 鱼台县| 巴东县| 诏安县| 施甸县| 通许县|