題目:
有4個(gè)線程和1個(gè)公共的字符數(shù)組。線程1的功能就是向數(shù)組輸出A,線程2的功能就是向字符輸出B骤竹,線程3的功能就是向數(shù)組輸出C帝牡,線程4的功能就是向數(shù)組輸出D。要求按順序向數(shù)組賦值A(chǔ)BCDABCDABCD蒙揣,ABCD的個(gè)數(shù)由線程函數(shù)1的參數(shù)指定靶溜。
輸入描述: 輸入一個(gè)int整數(shù)
輸出描述: 輸出多個(gè)ABCD
示例1
輸入
10
輸出
ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD
package main
import (
"fmt"
"io"
)
//5個(gè)線程同步
var str []byte
var count int
var ch1 chan int = make(chan int)
var ch2 chan int = make(chan int)
var ch3 chan int = make(chan int)
var ch4 chan int = make(chan int)
var ch5 chan int = make(chan int)
func main() {
go addA()
go addB()
go addC()
go addD()
for {
_, ok := fmt.Scanf("%d\n", &count) //處理輸入,跟C差不多
if ok == io.EOF {
break
}
ch1 <- 1 //觸發(fā)本次輸出
<-ch5 //ch5 懒震,結(jié)束本次輸出
for i := range str { //輸出
fmt.Printf("%c", str[i])
}
fmt.Println()
str = nil //每次運(yùn)行結(jié)束罩息,重新初始化slice
}
}
func addA() {
for {
<-ch1
if count != 0 {
str = append(str, 'A')
ch2 <- 1
} else {
ch5 <- 1
}
count--
}
}
func addB() {
for {
<-ch2
str = append(str, 'B')
ch3 <- 1
}
}
func addC() {
for {
<-ch3
str = append(str, 'C')
ch4 <- 1
}
}
func addD() {
for {
<-ch4
str = append(str, 'D')
ch1 <- 1
}
}