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 } } }