package main
import (
_ "a1/utils"
"fmt"
_ "time"
)
func putNum(initChan chan int) {
for i := 1; i <= 8000; i++ {
initChan <- i
}
close(initChan)
}
func primeNum(initChan chan int, primeChan chan int, exitChan chan bool) {
var flag bool
for {
num, ok := <-initChan
if !ok {
break
}
flag = true
for i := 2; i < num; i++ {
if num % i == 0 {
flag = false
break
}
}
if flag {
primeChan <- num
}
}
exitChan <- true
}
func main() {
initChan := make(chan int, 1000)
primeChan := make(chan int, 2000)
exitChan := make(chan bool, 4)
go putNum(initChan)
for i := 0; i < 4; i++ {
go primeNum(initChan ,primeChan ,exitChan)
}
go func() {
for i := 0; i < 4; i++ {
<-exitChan
}
close(primeChan)
close(exitChan)
}()
for {
res, ok := <-primeChan
if !ok {
break
}
fmt.Printf("素数=%d\n", res)
}
fmt.Println("main线程退出")
}