gpt4 book ai didi

c - fork 进程执行休眠

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

我有一个程序,它在整个程序的各个检查点之间同时按顺序并行执行相同的代码。为此,初始程序 fork 出一个子进程,该子进程顺序运行,而父进程并行运行。无论哪个进程首先到达下一个检查点,然后杀死另一个进程,并且重复此过程直到执行结束,从而尽可能快地执行(忽略 fork 和复制开销)。

我已经实现了这个,并且当只有顺序执行最快,或者只有并行执行最快时,一切正常,但是当前几个部分并行执行最快,然后接下来的几个部分顺序执行最快时,程序就会停止运行进程休眠。我看不出是什么原因造成的。我是否达到了 fork 进程的某些限制?杀死父进程会影响派生子进程的执行吗?反之亦然?

下面的代码给出了我的函数 checkPoint() ,该函数在每个检查点执行,并使用一些自定义代码处理最后部分的末尾。并行代码是使用 OpenMP 实现的,顺序代码永远不会遇到 OpenMP pragma 语句。

pid_t parent = 0;
pid_t child = 0;

void checkPoint() {

if (parent == 0) {

// First Time
parent = getpid();

} else if (child == 0) {

// Child Process
kill(parent, SIGKILL);
parent = getpid();

} else {

// Parent Process
kill(child, SIGKILL);

}

child = fork();

}

谢谢

最佳答案

事实证明,这是使用 gcc、OpenMP 和 forks 时出现的错误。

取自 http://bisqwit.iki.fi/story/howto/openmp/#OpenmpAndFork

If your program intends to become a background process using daemonize() or other similar means, you must not use the OpenMP features before the fork. After OpenMP features are utilized, a fork is only allowed if the child process does not use OpenMP features, or it does so as a completely new process (such as after exec()).

关于c - fork 进程执行休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172221/

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