2013-07-15 60 views
-3

我的程序取自user.then範圍,然後創建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; 
    } 
+0

你能不能做出三個不同的線程和叉子? –

+2

你想要3個過程?還是8? – Beta

+1

如果你等待(NULL)你正在開發一個接一個的進程 – Alexis

回答

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」三個打印輸出。

+0

它不起作用,因爲它首先打印所有過程的ID後面它打印睡眠P1然後P2然後P3 –

+0

*是*工作。使用你的手錶和時間。是否需要5秒或15秒?如果是15秒,那麼它不是併發的。但是如果它只有5個,那麼這意味着所有三個進程同時執行它們的「睡眠(5)」。 – JoshG79

+0

順便說一句 - 你期望看到什麼? 「併發」對你來說意味着什麼? – JoshG79