gpt4 book ai didi

c - 我怎样才能制作 "binary process tree"?

转载 作者:行者123 更新时间:2023-11-30 15:48:56 25 4
gpt4 key购买 nike

我有许多进程要创建。每个儿子必须生两个儿子。我使用了递归解决方案,它有效,但创建的进程数量不是我想要的。

这是我尝试过的:

void generate_kid(int g, int res){
pid_t kid1, kid2;
int status1, status2;
if( res > 0 ){
if( kid1 = fork() ){
if( res > 0){
if( kid2 = fork() ){
}
else {
printf("I am %d, my father is %d\n",getpid(),getppid());
generate_kid(g,res/2-1);
}
}
}
else {
printf("I am %d, my father is %d\n",getpid(),getppid());
generate_kid(g,res/2-1);
}
}
waitpid(kid1,&status1,0);
waitpid(kid2,&status2,0);
}

最佳答案

试试这个:

void generate_kid(int res){
pid_t kid1, kid2;
int status1, status2;

if( res > 0 ){
if ((kid1 = fork()) == 0) {
// child
printf("I am %d, my father is %d\n",getpid(),getppid());
// generate half remaining rounded up for odd processes
generate_kid((res-1)/2);
}
else if (kid1 > 0) {
// parent - create second child
if( res > 1){
if ((kid2 = fork()) == 0) {
// child 2
printf("I am %d, my father is %d\n",getpid(),getppid());
// generate half remaining processes
generate_kid((res-2)/2);
}
else if (kid2 > 0){
// parent 2
waitpid(kid2,&status2,0);
}
}
waitpid(kid1,&status1,0);
}
}
}

关于c - 我怎样才能制作 "binary process tree"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549920/

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