我正在编写一个在多个线程中进行计算并使用 c++ 未来返回结果的程序,这是我的代码的简化版本
int main()
{
int length = 64;
vector<std::future<float>> threads(length);
vector<float> results(length);
int blockLength = 8;
int blockCount = length/blockLength;
for(int j=0;j<blockCount;j++)
{
for(int i=0;i<blockLength;i++)
{
threads[i + j * blockLength] = std::async(func1,i*j);
}
for(int i=0;i<blockLength;i++)
{
results[i + j * blockLength] = threads[i].get();
}
}
func1的定义简化如下:
float func1(int input)
{
//calculations...
return result;
}
我希望上面的程序进行 64 次计算,每次 8 个线程,这样处理器和内存的使用会同时更好。
程序设想blockLength
一次post多少个线程,等到得到计算结果,再进行下一个循环。
程序将发布blockLength
线程数的blockCount
次数,例如,8 线程 8 次。
但是程序不工作,EXC_BAD_ACCESS
第一个线程循环blockLength
结束时总会出现异常,而且每个线程的计算时间并不能保证,任何线程都可以运行很长时间或快速结束。
这是一个屏幕截图:
如上所示,CPU 使用率随着一些线程的完成而下降,但是一旦第二个循环开始就会抛出异常。
请您指出我的使用有什么问题future
?我们怎样才能纠正它?
非常感谢!