多个分叉进程无限循环
Multiple Forked Processes Infinite Loop
我不完全确定如何描述这个问题,我很确定它不完全是一个无限循环(尽管它一直在运行而不退出),因为似乎程序甚至从未开始执行(我在主函数的开头放了一个 cout <<"hello",它没有发送到输出)。这是代码中搞砸事情的部分(当我注释掉这部分时,程序运行良好)。这是我第一次使用 fork() 命令,所以我可能会错过一些明显的东西:
for (int p = 0; p < processes; p++)
{
if ((pids[p] = fork()) == 0)
{
for(int v = p * (360/processes); p < (360/processes) * (p + 1); p++)
{
for (int i = 0; i < 360; i+=5)
{
match temp_match;
float dissimilarity = 0;
//calculate dissimilarity
for (int j = 0; j < size; j++)
{
dissimilarity += fabs(test_vector[j] - (search_set[v].vect)[(i + j) % 360]);
}
temp_match.x = search_set[v].x;
temp_match.y = search_set[v].y;
temp_match.offset = i;
temp_match.dissimilarity = dissimilarity;
result.push_back(temp_match);
}
//only keep keep the few with the smallest dissimilarity
std::sort(result.begin(), result.end(), sort_function);
result.resize(matches);
}
for(int i = p * matches; i < (p + 1) * matches; i++)
{
*(shm + i * 4) = result[i].x;
*(shm + i * 4 + 1) = result[i].y;
*(shm + i * 4 + 2) = result[i].offset;
*(shm + i * 4 + 3) = result[i].dissimilarity;
}
exit(0);
}
else if (pids[p] < -1)
{
cout << "uh oh";
exit(1);
}
else
{
waitpid(pids[p], NULL, 0);
}
}
所以我想我有两个问题,我是否正确使用了所有分叉的东西,是什么可能导致我的程序编译,但在我运行时甚至没有开始执行?
for(int v = p * (360/processes); p < (360/processes) * (p + 1); p++)
p++
应该是v++
. p <
应该是v <
.
此外,如果 360 不能被 processes
整除,这不会处理最后几个元素。试试这个:
for(int v = (p * 360) / processes; v < ((p + 1) * 360) / processes; v++)
此外,由于您在启动每个进程后立即等待它,因此一次只运行一个进程,并且通过并行运行进程不会获得更高的速度。
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 连接线程时的无限循环
- 为什么这种方法会进入无限循环?
- 由于QTextStream的无限循环
- Qt 在另一个线程中无限循环
- 多个分叉进程无限循环
- 无法在具有无限循环的 boost.python 模块中通过 Ctrl-c 杀死进程