[Go語言]用一個小範例玩Go多執行緒
剛好課堂作業是要寫多執行緒程式來做下面的目標,反正沒限定語言就用Go來偷懶一下吧^^。Go語言在多執行緒計算上非常方便只要加上"go"在你call的function之前就可以建立執行緒出來運算
目標:建立三個執行緒來執行找平均值、找最大值、找最小值
main.go
只要多執行幾次就會發現出來答案印出的順序並不會依照你call的順序,如果加入死迴圈進去,其他func依然正常運作~代表是一個真正的多執行緒程式。
main()最後的無窮迴圈是為了等待答案出來,不然call完後並不會等待答案run出來整隻程式就已經結束了(其實應該要加入監聽thread的機制...不過就等真正有要研究Go語言再說啦~)
目標:建立三個執行緒來執行找平均值、找最大值、找最小值
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語言再說啦~)
留言
張貼留言