我是Go编程语言的初学者,我的问题是:当我尝试编写一个并行化程序来查找两个值之间的质数时,该程序运行良好,但结果并不总是正确的。
package main
import ("fmt"
"time"
"sync"
"runtime"
)
const VALINIT int = 1000//000//00
const NBTOURS int = 50//0
func main(){
var div int
var i, j int
var wg sync.WaitGroup
runtime.GOMAXPROCS(8)
fmt.Printf("%d coeurs disponibles\n",runtime.GOMAXPROCS(8))
//debut de parallélisme
start := time.Now()
wg.Add(NBTOURS)
for i=VALINIT; i<VALINIT+NBTOURS; i++ {
go func(i int) {
div = 1
for j=2; j<i; j++ {
if i%j==0 {
div = 0
}
}
if div==1 {
fmt.Printf("nombre premier : %d detecte par la goroutine: %d\n", i, runtime.NumGoroutine())
}
defer wg.Done()
}(i)
}
wg.Wait()
elapsed := time.Since(start)
fmt.Println(elapsed)
}
coeurs disponibles
nombre premier : 1039 detecte par la goroutine: 23
nombre premier : 1034 detecte par la goroutine: 23
nombre premier : 1029 detecte par la goroutine: 23
nombre premier : 1015 detecte par la goroutine: 23
377.422µs