2017-04-13 30 views
0

這是我的代碼C++的隨機數,等待父母所有的孩子當過程

#include <iostream> 
#include <string> 
#include <ctime> 

int main() 
{ 

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

    if(pid==0) { 
     // son process 
     srand(time(NULL)); 
     int r = rand()%4+1; 
     cout<<"pid:"<<getpid() <<"num": "<<r<<endl; 
    } 
    else{ 
     //parent process 
    } 

} 

我有問題trandom數相同的全部過程,我怎麼可以重置蘭特()? 我已經試圖做不同的srand()到每個進程它不起作用。

+1

'如果((PID()==叉())== 0)' - 這個構造很有趣......我懷疑這個代碼將編譯。 –

+0

如果你想讓它們得到不同的隨機數,你需要在每個進程中給'srand()'一個不同的參數。由於所有進程同時啓動,'time(NULL)'將是相同的。 – Barmar

+0

你應該只問一個問題,而不是3個不同的問題。 – Barmar

回答

0
  1. time(NULL)+getpid()放到所有樹種的不同種子中;
  2. http://man7.org/linux/man-pages/man3/pthread_join.3.html
+0

這是解決我的問題。謝謝。 –

+0

讓我們假設,我想在特定的時間運行所有的進程,10秒鐘,直到他們完成他們的跑步。我應該在創建之前聲明變量,並使while循環,如果是,在哪裏? –

相關問題