我有两个模拟考试的问题。我得到了答案,但无法弄清楚他们背后的理由。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”的主要程序,为什么?
从老师的答案是:
所有线程的状态被封锁,同时主线程。
第二个问题是:
会如何,如果我们换一个事实过程的前两行的整个程序的效率会受到影响?
答案是:
所有线程都将按顺序运行。每个线程只有在完成时才会触发另一个线程。