如何在MATLAB中同时运行两个共享变量的循环?

zengzsys  于 2022-12-27  发布在  Matlab
关注(0)|答案(1)|浏览(453)

我试图实现一些逻辑,可以在下面的例子中简化:

count = 5;
value = 0;
parfor i = 1:2
    if i == 1
        for u = 0:count
            %Do dome work
            pause(5);
            value = value + 1;
        end
    else
        while true
           disp(value)
        end
    end
end

我想并行运行共享某个变量的两个循环。上面是我能得到的最接近的。我意识到如果我使用如图所示的parfor,我就可以在各自的工作器上调用每个循环。不幸的是,我得到了错误The PARFOR loop cannot run due to the way variable 'value' has been used
任何人有一个想法,我如何才能成功地实现上述目标?

mzaanser

mzaanser1#

很难说你到底想在这里做什么,但是parfor看起来并不合适。你可能最好使用spmd,它被设计成允许工作者之间的通信。但是,注意spmd内部使用的通信方法本质上是“双边的”--即发送者和接收者都必须参与。类似于这样:

spmd
    if labindex == 1
        for u = 0:count
            %Do dome work
            pause(5);
            value = value + 1;
            labSend(value, 2); % send value to other worker
        end
        labSend([], 2) % tell it to finish
    elseif labindex == 2
        value = labReceive(1);
        while ~isempty(value)
            % do stuff

            % get updated "value"
            value = labReceive(1);
        end
    end
end

相关问题