在Matlab(2012b)中,有没有办法在发送数据之前暂停SPMD创建的一个线程?因为线程2只有一个有限大小的缓冲区来接受来自线程1的数据,并且根据matlab,labSend()将在数据传输完成之前返回,这意味着理论上线程1可以继续向线程2发送数据,直到系统运行内存不足:
我想做的是这样的事情:
spmd (2)
if labindex==1
%...
if (BufferAtLab2isNotFull)
labSend(data, 2);
end
%...
elseif labindex==2
if (BufferNotFull)
labReceive(data, 1);
end
%...
end
end
在C / C ++中,使用共享内存多线程很容易做到这一点,但在matlab中似乎很难,因为没有共享资源需要检查。
答案 0 :(得分:0)
如果您希望实验1在每个labSend
之后等待,直到实验2完成它labRecieve
,那么只需在labBarrier
中添加spmd (2)
if labindex==1
%...
if (BufferAtLab2isNotFull)
labSend(data, 2);
end
labBarrier;
%...
elseif labindex==2
labSend(bufSize,1);
%...
if (BufferNotFull)
labReceive(data, 1);
end
labBarrier;
%...
end
end
,这将导致实验1等到所有线程都达到这一点。
{{1}}
如果您担心实验室1在单个labSend中发送太多,您可以随时让实验室2发送它的缓冲区大小。