[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 %d\n", 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 %d\n", 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 %d\n", max)
}

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

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

留言

這個網誌中的熱門文章

[Arduino]電子秤平 重量感測條+HX711AD模組

cpe練習筆記 UVa401 Palindromes

cpe練習筆記 UVa10019 Funny Encryption Method