在Go中使用goroutine并行运行程序

时间:2019-05-24 09:16:09

标签: go parallel-processing goroutine

我是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

0 个答案:

没有答案