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 關注
- 212 瀏覽
添加回答
舉報