Ushing shmat和shmget with fork用于乘以矩阵

时间:2015-03-20 18:51:06

标签: c++ c fork matrix-multiplication fork-join

这是我正在上课的作业。我们必须使用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的方式。我也不知道如何在最后加入叉子。我在这里尝试,但我能找到的文件非常密集,我的教授基本上没有教授作业的编码方面。

1 个答案:

答案 0 :(得分:0)

您必须测试返回值和errno。在您的情况下,shmget失败并显示ENOENT。有关详细信息,请参阅man shmget