C++ 并行执行过程

C++ 并行执行过程,c++,c,linux,parallel-processing,fork,C++,C,Linux,Parallel Processing,Fork,我的程序从用户那里获取范围,然后创建3个进程并逐个执行 但我希望所有进程同时运行 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/wait.h> void function(); cin>>range; cin>>pro

我的程序从用户那里获取范围,然后创建3个进程并逐个执行 但我希望所有进程同时运行

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <sys/wait.h>

    void function();
    cin>>range;
cin>>process;
    int main() {
    int range = 1000;
    int i;
    int pid;
    int pid1;
    for(i = 0; i < ; i++) {
    pid1 = fork();
    }
    if(pid1==0) {
    pid = getpid();
    printf("The process id is: %d\n", pid);
    function(range); 
    }
    else {
    wait(0); 
    }
    return 0;
    }
#包括
#包括
#包括
#包括
#包括
空函数();
cin>>范围;
cin>>过程;
int main(){
整数范围=1000;
int i;
int-pid;
int-pid1;
对于(i=0;i<;i++){
pid1=fork();
}
如果(pid1==0){
pid=getpid();
printf(“进程id为:%d\n”,pid);
功能(范围);
}
否则{
等待(0);
}
返回0;
}

首先,正如其他人所提到的,您不是在分叉3个进程,而是分叉8个进程。修正如下:

 for (i = 0; i < 3; ++i) {
     pid1 = fork();
     if (pid1 == 0) break;
 }

您应该打印三个“pid=XX”,然后延迟大约5秒,然后是“done sleep XX”。

您不能生成三个不同的线程并从中分叉吗?您需要三个进程吗?或8?如果您等待(NULL),则您正在逐个启动进程。问题不在于它是3还是8,主要问题在于同时运行它们。因此,在启动下一个进程之前,不要调用
wait
!它不工作,因为它首先打印所有进程的id,然后打印正在工作的休眠p1、p2和P3。用你的手表计时。需要5秒还是15秒?如果是15秒,那么它不是并发的。但是如果只有5个,那么这意味着所有三个进程都同时执行它们的“sleep(5)”。顺便问一下,您希望看到什么?什么是“并发”对你来说是什么意思?我想知道,假设我创建3个进程,第一次运行,打印素数,第二次运行,打印它的输出,第三次运行,然后再次运行,第一个进程,打印剩余输出,依此类推。但在我的情况下,它先打印第一个进程的完整输出,然后再打印第二个进程,然后再打印第三个进程,我感到困惑……:/说。我有点累了
if (pid1 == 0) {
   printf("pid=%d\n", getpid());
   sleep(5);
   printf("done sleep %d\n", getpid());
} else {
   wait(0);
}