【问题标题】:Execute Process concurently [closed]同时执行流程[关闭]
【发布时间】:2013-07-15 13:16:00
【问题描述】:

我的程序从用户获取范围。然后它创建 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;
    }

【问题讨论】:

  • 你不能制作三个不同的线程并从中分叉吗?
  • 您想要 3 个进程?还是 8 个?
  • 如果你等待(NULL)你正在一个一个地启动这个过程
  • 不管是 3 还是 8 都不是问题,主要问题是同时运行它们
  • 所以,在开始下一个之前不要打电话给wait

标签: c++ c linux parallel-processing fork


【解决方案1】:

首先,正如其他人所提到的,您不是分叉 3 个进程,而是分叉 8 个。像这样修复它:

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

然后,所有 4 个进程 并行运行。不过,根据 function 所做的事情,可能很难看到这一点 - 它可能完成得太快。所以试试这个:

if (pid1 == 0) {
   printf("pid=%d\n", getpid());
   sleep(5);
   printf("done sleep %d\n", getpid());
} else {
   wait(0);
}

您应该打印三个“pid=XX”,然后延迟大约 5 秒,然后“完成睡眠 XX”。

【讨论】:

  • 它不工作,因为它首先打印所有进程的 id,然后它打印 sleep p1 然后 p2 然后 p3
  • 那个正在工作。使用您的手表并计时。需要 5 秒还是 15 秒?如果是 15 秒,那么它不是并发的。但如果只有 5 个,则意味着所有三个进程都同时执行了它们的“sleep(5)”。
  • 顺便说一句 - 你期待看到什么? “并发”对您意味着什么?
  • 好吧,我想知道假设我创建了 3 个进程,第一次运行并打印素数均值,而第二次运行并打印出第三个,然后再次第一次处理打印剩余的输出等等。但在我的情况下它首先打印第一个进程的完整输出,然后是第二个,然后是第三个我很困惑...:/
  • 是的,正如你所说,它需要五秒钟。我越来越少了
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-13
相关资源
最近更新 更多