前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 实现用两个协程顺序打印奇数和偶数

Go 实现用两个协程顺序打印奇数和偶数

原创
作者头像
_春华秋实
发布2023-09-07 20:43:12
3430
发布2023-09-07 20:43:12
举报
文章被收录于专栏:_春华秋实_春华秋实

方法一:使用无缓冲协程的阻塞机制

代码语言:javascript
复制
package main

import (
    "fmt"
    "sync"
)

var POOL = 100

func groutine1(p chan int, group *sync.WaitGroup) {
    defer group.Done()
    for i := 1; i <= POOL; i++ {
        p <- i
        if i%2 == 1 {
            fmt.Println("groutine-1:", i)
        }
    }
}

func groutine2(p chan int, group *sync.WaitGroup) {
    defer group.Done()
    for i := 1; i <= POOL; i++ {
        <-p
        if i%2 == 0 {
            fmt.Println("groutine-2:", i)
        }
    }
}

func main() {
    msg := make(chan int)
    var s sync.WaitGroup
    s.Add(2)
    go groutine1(msg, &s)
    go groutine2(msg, &s)
    s.Wait()

}

方法二 使用全局变量

代码语言:javascript
复制
package test

import (
	"fmt"
	"testing"
)

func TestChannel(t *testing.T) {
	nowValue := -1
	nMax := 100
	nChan := make(chan int, 2)
	//输出奇数
	go func() {
		for i := 0; i <= nMax && i%2 == 0; {
			if i-1 == nowValue {
				nChan <- i
				i += 2
			}
		}
	}()
	//输出偶数
	go func() {
		for i := 1; i <= nMax && i%2 != 0; {
			if i-1 == nowValue {
				nChan <- i
				i += 2
			}
		}
	}()
	for nowValue < nMax {
		nowValue = <-nChan
		fmt.Println(nowValue)
	}
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一:使用无缓冲协程的阻塞机制
  • 方法二 使用全局变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档