【发布时间】:2018-05-06 04:34:10
【问题描述】:
我正在使用 go 例程并行地乘法矩阵。我的索引超出范围,但是当我按顺序运行相同的代码时,它可以工作。 (按顺序我的意思是评论行)。我正在使用延迟,所以我不必等待我的例程结束,因为这将是最后一次调用
错误 D:\0000>去运行 Ap.go 恐慌:运行时错误:索引超出范围
goroutine 5 [running]:
main.pmultiply(0xc04206c000, 0x3, 0x3, 0xc04206c050, 0x3, 0x3, 0x1, 0x3, 0x0)
D:/0000/Ap.go:48 +0x95
main.multiply.func1(0xc04206c0a0, 0x3, 0x3, 0xc04200e090, 0xc04200e098, 0xc04206
c000, 0x3, 0x3, 0xc04206c050, 0x3, ...)
D:/0000/Ap.go:64 +0x94
created by main.multiply
D:/0000/Ap.go:63 +0x1d7
exit status 2
代码
package main
import "fmt"
func main(){
matrix_a := make([][]int,3);
for i:=0;i<len(matrix_a);i++{
matrix_a[i]=make([]int,3);
}
for i:=0;i<len(matrix_a);i++{
for j:=0;j<len(matrix_a[0]);j++{
matrix_a[i][j] = 2;
}
}
matrix_b := make([][]int,3);
for i:=0;i<len(matrix_b);i++{
matrix_b[i]=make([]int,3);
}
for i:=0;i<len(matrix_b);i++{
for j:=0;j<len(matrix_b[0]);j++{
matrix_b[i][j] = 2;
}
}
defer fmt.Println(multiply(matrix_a,matrix_b));
}
func pmultiply(matrix_a [][] int,matrix_b [][] int,row int,col int) int{
sum := 0;
for z:=0;z<len(matrix_a[0]);z++{
sum = sum + matrix_a[row][z] * matrix_b[z][col];
}
return sum;
}
func multiply(matrix_a [][] int,matrix_b [][] int) ([][] int){
matrix_c := make([][]int,3);
for i:=0;i<len(matrix_c);i++{
matrix_c[i]=make([]int,3);
}
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
go func(){
matrix_c[i][j] = pmultiply(matrix_a,matrix_b,i,j);
}()
}
}
return matrix_c;
}
【问题讨论】:
标签: go parallel-processing goroutine indexoutofrangeexception