gpt4 book ai didi

c++ - 使用 shmat 和 shmget 与 forks 相乘矩阵

转载 作者:行者123 更新时间:2023-11-30 17:18:27 25 4
gpt4 key购买 nike

这是我正在为类做的作业。我们必须使用 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];
}
}
}

我当前的问题是 shm[i][j] 行上的段错误,该错误发生在第一次循环通过 (i = 0, j = 0) 时。我也知道我必须改变使 pid 处于 pid 数组中的方式。我也不知道最后如何加入 fork 。我正在尝试这里,但我找到的文档非常密集,而且我的教授基本上没有教授作业的编码方面的内容。

最佳答案

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

关于c++ - 使用 shmat 和 shmget 与 forks 相乘矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29173835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com