首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >两协程实现交替打印数据

两协程实现交替打印数据

原创
作者头像
王宝
修改2024-11-24 15:51:53
修改2024-11-24 15:51:53
1760
举报

两个有缓存通道,打印100以内数字实现方案:

代码语言:txt
复制
package main

import (
 "fmt"
 "sync"
)

func main() {
 // 创建两个通道用于同步
 ch1 := make(chan struct{}, 1)
 ch2 := make(chan struct{}, 1)

 // 创建一个等待组,用于等待两个协程完成
 var wg sync.WaitGroup
 wg.Add(2)

 // 第一个协程
 go func() {
  defer wg.Done()
  for i := 1; i <= 100; i += 2 {
   <-ch1
   fmt.Printf("协程1: %d\n", i)
   ch2 <- struct{}{}
  }
 }()

 // 第二个协程
 go func() {
  defer wg.Done()
  for i := 2; i <= 100; i += 2 {
   <-ch2
   fmt.Printf("协程2: %d\n", i)
   ch1 <- struct{}{}
  }
 }()

 // 启动第一个协程
 ch1 <- struct{}{}

 // 等待两个协程完成
 wg.Wait()
}

两个无缓存通道,用两个协程循环打印1, 2

代码语言:txt
复制
package main

import (
   "fmt"
   "sync"
)

func Print1(ch1 chan bool, ch2 chan bool, wg *sync.WaitGroup) {
   defer wg.Done()
   for {
      <-ch1
      fmt.Print("1")
      ch2 <- true
   }
}

func Print2(ch1 chan bool, ch2 chan bool, wg *sync.WaitGroup) {
   defer wg.Done()
   for {
      <-ch2
      fmt.Print("2")
      ch1 <- true
   }
}

func main() {
   var wg sync.WaitGroup
   ch1 := make(chan bool)
   ch2 := make(chan bool)

   wg.Add(2)
   go Print1(ch1, ch2, &wg)
   go Print2(ch1, ch2, &wg)

   ch1 <- true
   wg.Wait()
}

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 两个有缓存通道,打印100以内数字实现方案:
  • 两个无缓存通道,用两个协程循环打印1, 2
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档