2017-04-13 28 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循环,如果是,在哪里? –

相关问题