zoukankan      html  css  js  c++  java
  • Go多协程循环打印ABAC

    前段时间有个题目,是要求Java多线程完成ABAC重复输出,要求是A线程值输出A,B线程只输出B,C线程只输出C,

    可我不太会Java,就改用Go实现尝试一下,

    当晚结束后改了1个多小时终于写完,也是对知识的补充理解了。

     package main
    
    import (
       "fmt"
       "sync"
    )
    
    var wg sync.WaitGroup
    var n int
    var chA = make(chan int)
    var chB = make(chan int)
    var chC = make(chan int)
    
    func main() {
       fmt.Scan(&n)
       wg.Add(1)//增加进程任务
       go send(n)
       wg.Wait()//用于等待该进程结束,直至wg.Done()运行次数等于wg.Add()增加的次数,同时避免time.Sleep的尴尬用法
    }
    
    func send(n int) {
       go A(chA)
       go B(chB)
       go C(chC)
       chA <- 1
    }
    
    func A(c chan int) {
       for {//for是为了保持运行
          if count := <-c; count <= n {
             fmt.Print("A")
             if (count+1)%4 != 0 {
                chB <- count + 1
             } else {
                chC <- count + 1
             }
          } else {
             wg.Done()
             return
          }
       }
    }
    
    func B(c chan int) {
       for {
          if count := <-c; count <= n {
             fmt.Print("B")
             chA <- count + 1
          } else {
             wg.Done()
             return
          }
       }
    }
    
    func C(c chan int) {
       for {
          if count := <-c; count <= n {
             fmt.Print("C")
             chA <- count + 1
          } else {
             wg.Done()
             return
          }
       }
    }
  • 相关阅读:
    文件路径选择中的三态逻辑
    .net版本号
    使用MSBuild编译vs多个解决方案
    CEF截图
    使用SharpZIpLib写的压缩解压操作类
    软件试用期设置
    list转datatable
    excel 导入
    网站登录简单验证码
    UEditor编辑器
  • 原文地址:https://www.cnblogs.com/VingB2by/p/11691603.html
Copyright © 2011-2022 走看看