小编Jof*_*fro的帖子

如何从dispatch_apply(GCD)循环写入数组?

我编写了使用Runge-Kutta方法计算大量耦合主方程的动力学的代码.代码包含许多for循环,其中每个步骤都是独立的.我打算使用Grand Central Dispatch加速该计划.我的尝试基于我在http://www.macresearch.org/cocoa-scientists-xxxi-all-aboard-grand-central找到的一个例子.我的代码和macresearch上的示例都没有在我的机器上编译(MacOSX 10.6.8 Xcode 4.0.2).所以这是我的代码:

...
    double values[SpaceSize], k1[SpaceSize];    

        for ( int t=1 ; t<Time ; t++ ) {

            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

            //k1
            for (int k=0 ; k<SpaceSize ; k++ ) values[k]=Concentration[k][t-1];

            dispatch_apply(SpaceSize, queue,
                       ^(size_t k)  {
                           k1[k]=h * derives(values, SpaceSize, k); //<--error      
                                    }
                        );
...
Run Code Online (Sandbox Code Playgroud)

它打破了错误:

语义问题:不能在块内引用具有可变修改类型的声明

我尝试用向量替换数组(值,k1),但后来我得到另一个错误消息:

语义问题:只读变量不可分配

这就是我被困住的地方,并不知道这些错误消息试图告诉我的是什么.我花了很长时间搜索并询问是否有人可以提供帮助.我会非常感谢提示或更好的方法来解决这个问题.

c++ macos concurrency grand-central-dispatch

6
推荐指数
1
解决办法
4250
查看次数

标签 统计

c++ ×1

concurrency ×1

grand-central-dispatch ×1

macos ×1