这是我正在上课的作业。我们必须使用forks,shmget和shmat从两个给定的矩阵创建一个乘法矩阵。每个fork都会执行一个乘法实例(这是必需的)。
size_t size = matrix1.height * matrix2.width * sizeof(int);
int shmid = shmget(2000,size,0);
int ** shm;
shm = (int ** )shmat (shmid, 0 , 0);
for (int i = 0; i < matrix1.height; i++){
for (int j = 0; j < matrix2.width; j++){
cout << "i: " << i << "j: " << j << endl;
shm[i][j] = 0;
cout <<"a" << endl;
}
}
for (int i = 0; i < matrix1.height; i++){
for (int j = 0; j < matrix2.width; j++){
vector<int> row = matrix1.matrix_rows_by_columns[i];
vector<int> column;
for (int s = 0; s < matrix2.height; s++){
column.push_back(matrix2.matrix_rows_by_columns[s][j]);
}
for (int p = 0; p < row.size(); p++){
shm = (int ** )shmat (shmid, 0 , 0);
pid_t pid = fork();
if (pid == 0){
shm[i][j] += row[p] * column[p];
}
}
}
我当前的问题是在第一个循环(i = 0,j = 0)上发生的行shm [i] [j]上的分段错误。我也知道我必须改变我使用pids的方式。我也不知道如何在最后加入叉子。我在这里尝试,但我能找到的文件非常密集,我的教授基本上没有教授作业的编码方面。
答案 0 :(得分:0)
您必须测试返回值和errno
。在您的情况下,shmget
失败并显示ENOENT
。有关详细信息,请参阅man shmget
。