使用dispatch_apply()并行化循环时更改变量

时间:2014-08-12 21:47:26

标签: objective-c objective-c-blocks grand-central-dispatch

我有这段代码:

Matrix mat;

for (int y=0; y<n; ++y)
{
    for (int x=0; x<m; ++x)
    {
        // do some small operation on mat(y,x)
    }
};

串行计算非常慢(这个双循环称为500-1000次),所以作为第一步,我想将它与dispatch_apply并行化。

Matrix mat;

dispatch_apply(PATCH_SIZE, _queue, ^(size_t y)
{
    for (int x=0; x<m; ++x)
    {
        // do some small operation on mat(y,x)
    }
});

问题在于变量mat,它在块内定义为只读。有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您希望变量(ref)可以在块中写入,则可以在其前面添加__block

例如,__block Matrix mat;

答案 1 :(得分:0)

您可以尝试将mat声明为__block Matrix mat;