0

我有一个代码mc,我想用不同的输入文件执行数千次。要调用代码,只需键入一个:

./mc -sim my_input_file

我想编写一个小型辅助程序,它允许我运行该程序数千次,但一次只运行 N 次mc(假设我有 N 个处理器,每个处理器执行一次)

到目前为止,我所做的是创建一个辅助程序,它基本上包含:

unsigned int N_processors(8);
unsigned int m(0);
for(unsigned int i(0); i<1000;i++){
    system("./mc -sim " + file[i] +"&"); /*file[i] is the ith input file*/
    m++;
    while(m>=N_processors){ 
        usleep(1e6); 
        if(/*test condition*/){m--;}
     }
}

我的问题是我不知道应该用什么替换/*test condition*/


这是因为derived d()被视为“函数 d,不带任何参数调用,返回派生实例”。谷歌“最令人头疼的解析”。

4

1 回答 1

0

如果你在 Unix 系统上,你最好使用 fork() 而不是 system()。因此,您可以在启动另一个进程之前检查一个进程是否已完成。

类似的东西:

unsigned int N_processors(8);
unsigned int m(0);
int status = 0;
pid_t* pID = new pid_t[pCount];
for(unsigned int i(0); i<1000;i++){
{
   pid= fork()
   if(!pid) // child process
    {   
     system("./mc -sim " + file[i] +"&"); /*file[i] is the ith input file*/
    } 
   else 
    {
     nbfork++;
     if(nbfork >= N_processors)
      {
        wait(&status);  // waiting for a child to finish before spawning another one
        nbfork--;
      }
    }
}

未测试

于 2013-07-23T10:24:13.830 回答