剛好課堂作業是要寫多執行緒程式來做下面的目標,反正沒限定語言就用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語言再說啦~)