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
          }
       }
    }
  • 相关阅读:
    如何开启无线网卡
    E-SATA接口
    sata express接口
    联想服务器驱动
    国家信息安全漏洞共享平台
    SQL SERVER 性能调优
    计算机网络知识库
    CCNP 视频
    ORACLE 培训 -相克军
    phxsql
  • 原文地址:https://www.cnblogs.com/VingB2by/p/11691603.html
Copyright © 2011-2022 走看看