我有兩個模擬考試的問題。我得到了答案,但無法弄清楚他們背後的理由。Go中的多線程。有人可以向我解釋這些答案嗎?
我會先發布代碼,然後回答問題和答案。也許有人會如此善意地向我解釋答案?
package main
import "fmt"
func fact(n int, c chan int, d chan int) {
k := /* code to compute factorial of n */
z := <- d
c <- k + z
d <- z + 1
}
func main() {
r := 0
c := make(chan int)
d := make(chan int)
for i = 0 ; i < N ; i++ {
go fact(i,c,d)
}
d <- 0
for j = 0 ; j < N ; j++ {
r = r + <-c
}
fmt.Printf("result = %d\n",r)
}
的第一個問題是:
程序如何表現,如果我們忽略線「d < - 0」的主要程序,爲什麼?
從老師的答案是:
所有線程的狀態被封鎖,同時主線程。
第二個問題是:
會如何,如果我們換一個事實過程的前兩行的整個程序的效率會受到影響?
答案是:
所有線程都將按順序運行。每個線程只有在完成時纔會觸發另一個線程。