多线程不适用于launch :: async选项

时间:2015-06-11 17:48:19

标签: c++ multithreading

我想用不同的参数同时运行程序。为此,我用C ++编写了另一个程序。

我使用此代码执行线程:

 future<double> fut[REPEAT];
 for (int j = 0; j < REPEAT; j++) {
      fut[j] = async(launch::async, executerCallerTask, currentWeight, j);
 }

当executerCallerTask调用类

double executerCallerTask(double currentWeight, int threadNo){
    cout << "a new thread started!!!!" << endl << endl << endl;
    anExecuter instance(currentWeight, ITERATIONS, threadNo);
    double var1 = instance.getVar1();
    return var1;
}

该类基本上运行具有给定参数的程序

anExecuter::anExecuter(double currentWeight, int iterations, int threadNo){
    char commandString[120];
    snprintf(commandString,120,"cd /Program Directory/; ./program %f %d",currentWeight, iterations);
    system(commandString);
}

这里的问题是具有不同参数的程序一个接一个地运行,而不是同时运行。我还尝试使用thread(executerCallerTask, currentWeight, j);替代解决方案,但无法使其工作。

我感谢任何帮助。提前谢谢!

修改

在Orbit的警告中进行Lightness Races后,我设置了断点并看到线程有效,直到它出现在system(commandString);行。我认为等待是因为system仅适用于一个终端并逐个调用命令。所以代码可能没什么问题。

0 个答案:

没有答案