[Go語言]用一個小範例玩Go多執行緒




剛好課堂作業是要寫多執行緒程式來做下面的目標,反正沒限定語言就用Go來偷懶一下吧^^。Go語言在多執行緒計算上非常方便只要加上"go"在你call的function之前就可以建立執行緒出來運算

目標:建立三個執行緒來執行找平均值、找最大值、找最小值




main.go

package main

import "fmt"

// init array
var inputNum = [7]int{90, 81, 78, 95, 79, 72, 85}

//use `$ go run main.go` to excute the program
func main() {
 // create three thread to find ans
 go findAvg()
 go findMin()
 go findMax()

 for true {
  // wait for ans
 }
}

func findAvg() {
 var tmp = 0
 var len = len(inputNum)

 for i := 0; i < len; i++ {
  tmp = tmp + inputNum[i]
 }

 tmp = tmp / len
 fmt.Printf("The average value is %dn", tmp)
}

func findMin() {
 var min = inputNum[0]
 var len = len(inputNum)

 for i := 0; i < len; i++ {
  if min > inputNum[i] {
   min = inputNum[i]
  }
 }

 fmt.Printf("The minmum value is %dn", min)
}

func findMax() {
 var max = inputNum[0]
 var len = len(inputNum)

 for i := 0; i < len; i++ {
  if max < inputNum[i] {
   max = inputNum[i]
  }
 }

 fmt.Printf("The maxmum value is %dn", max)
}



只要多執行幾次就會發現出來答案印出的順序並不會依照你call的順序,如果加入死迴圈進去,其他func依然正常運作~代表是一個真正的多執行緒程式。

main()最後的無窮迴圈是為了等待答案出來,不然call完後並不會等待答案run出來整隻程式就已經結束了(其實應該要加入監聽thread的機制...不過就等真正有要研究Go語言再說啦~)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料