1 回答
TA贡献1834条经验 获得超8个赞
使用WaitGroup.
以下代码使用两个 WaitGroup。main 函数用于wgTest等待print_if_prime函数完成。完成后,它会关闭通道以中断打印 goroutine 中的 for 循环。主要功能用于wgPrint等待打印完成。
package main
import (
"fmt"
"sync"
)
func main() {
c := make(chan int)
var wgPrint, wgTest sync.WaitGroup
wgPrint.Add(1)
go func(wg *sync.WaitGroup) {
defer wg.Done()
for n := range c {
fmt.Print(" ", n)
}
}(&wgPrint)
for n := 2; n < 1000; n++ {
wgTest.Add(1)
go print_if_prime(&wgTest, n, c)
}
wgTest.Wait()
close(c)
wgPrint.Wait()
}
func print_if_prime(wg *sync.WaitGroup, n int, channel chan int) {
defer wg.Done()
for d := 2; d*d <= n; d++ {
if n%d == 0 {
return
}
}
channel <- n
}
- 1 回答
- 0 关注
- 235 浏览
添加回答
举报
