让两个协程交替打印1-100

package main

import "fmt"

func main() {
   numChan := make(chan int)
   exitChan := make(chan struct{})
   go func() {
      for i := 1; i <= 101; i = i + 2 {
         result, ok := <-numChan
         if ok && result <= 100 {
            fmt.Println("goroutine0 : ", result)
            }
         numChan <- i
         }
      }()
   go func() {
      defer close(exitChan)
      for i := 0; i <= 100; i = i + 2 {
         numChan <- i
         result, ok := <-numChan
         if ok && result <= 100 {
            fmt.Println("goroutine1 : ", result)
            }
         }
      }()
   <-exitChan
   }
要实现这个需求,我们可以利用两个通道来进行协程之间的同步。一个协程负责打印数字,另一个协程负责打印字母,然后通过通道来交替控制它们的执行顺序。以下是一个示例代码: ```go package main import ( "fmt" "sync" ) func printNumbers(chNum chan bool, chAlpha chan bool, wg *sync.WaitGroup) { defer wg.Done() for i := 1; i <= 52; i += 2 { <-chNum // 等待字母协程打印完毕 fmt.Printf("%d%d", i, i+1) chAlpha <- true // 通知字母协程可以开始打印 } } func printLetters(chNum chan bool, chAlpha chan bool, wg *sync.WaitGroup) { defer wg.Done() for i := 'A'; i <= 'Z'; i++ { <-chAlpha // 等待数字协程打印完毕 fmt.Printf("%c", i) chNum <- true // 通知数字协程可以开始打印 } } func main() { chNum := make(chan bool) // 数字协程通道 chAlpha := make(chan bool) // 字母协程通道 var wg sync.WaitGroup wg.Add(2) go printNumbers(chNum, chAlpha, &wg) go printLetters(chNum, chAlpha, &wg) chNum <- true // 通知数字协程可以开始打印 wg.Wait() fmt.Println() } ``` 在这个示例代码中,我们创建了两个通道`chNum`和`chAlpha`,分别用于数字协程和字母协程之间的同步。然后使用`sync.WaitGroup`来等待协程的完成。 通过交替地在协程之间发送和接收消息,我们可以实现数字和字母的交替输出。数字协程打印1-52中的奇数,然后等待字母协程打印完毕后再继续打印下一个数字。字母协程负责打印A-Z,然后等待数字协程打印完毕后再继续打印下一个字母。 最终的输出结果将会按照1-52和A-Z的顺序交替打印,符合题目要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值