go語言中goroute使用:=遇到的坑

來源:互聯網
上載者:User

標籤:沒有   IV   printf   art   fun   ack   使用   tin   正整數   

先看下原始碼,預想從1至N總取出所有能被a或b整除的正整數之和,為了利用go語言的並行優勢,特使用goroute特性來實現,同時使用普通順序計算進行效率比較分析

package chango

import (
"fmt"
"time"
)

func get_sum_of_divisible(num int64, divider int64, resultChan chan int64) {
var sum int64 = 0
var value int64
for value = 1; value < num; value++ {
if value%divider == 0 {
sum += value
}
}
resultChan <- sum
}
func Zhengchu_testing(limit int64, one int64, two int64) {
resultchan := make(chan int64, 3)
var three int64
three = one * two

t_start := time.Now()

go get_sum_of_divisible(limit, one, resultchan)
go get_sum_of_divisible(limit, two, resultchan)
go get_sum_of_divisible(limit, three, resultchan)

one_sum, two_sum, three_sum := <-resultchan, <-resultchan, <-resultchan

var sum int64
var value int64
sum = one_sum + two_sum - three_sum

fmt.Println(sum)
t_end := time.Now()
fmt.Println(one_sum, two_sum, three_sum)
fmt.Printf("testing times1:%v\n", t_end.Sub(t_start))

sum = 0
t_start = time.Now()

for value = 1; value < limit; value++ {
if value%one == 0 {
sum += value

}
if value%two == 0 {
sum += value
}
if value%three == 0 {
sum -= value
}
}
fmt.Println(sum)
t_end = time.Now()
fmt.Printf("testing times2:%v\n", t_end.Sub(t_start))
}
然後在main包中調用該chango包
package main

import "./chango"

func main(){

chango.Zhengchu_testing(10,3,5)
}

初看上去,chango包沒有文法毛病,但是實際測試發現,顯然通過順序計算10以內能被3或5整除的所有正整數分別為3,5,6,9,他們之和應該為23,能被3整數的整數之和為3+6+9=15,能被5整除的正整數之和為5,能被3*15=15的正整數之和為0
而通過goroute計算10以內內能被3或5整除的所有正整數之和卻不是23,而是-13或13,這又是為什麼呢?
通過調試發現,問題就出現在“:=”語句中
  one_sum, two_sum, three_sum := <-resultchan, <-resultchan, <-resultchan
多次運行
通過分別列印能被3或5或3*5=15的正整數之和,他們的結果竟然是0,18,5或0,5,18,這個結果竟然不唯一





go語言中goroute使用:=遇到的坑

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.