【问题标题】:Changing a variable when using dispatch_apply() to parallelize a loop [duplicate]使用 dispatch_apply() 并行化循环时更改变量 [重复]
【发布时间】:2014-10-06 03:07:43
【问题描述】:

我有这个代码:

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,它在块内被定义为只读。有没有办法解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    如果你想让一个变量(ref)在一个块中是可写的,你可以在它前面加上__block

    例如,__block Matrix mat;

    【讨论】:

    • 谢谢你的作品。当 SO 允许我时会接受答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-06
      • 2014-12-07
      • 2018-08-10
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多