1

我正在编写一个在多个线程中进行计算并使用 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?我们怎样才能纠正它?

非常感谢!

4

0 回答 0