2013-04-12 71 views
3

在Matlab(2012b)中,有没有办法在发送数据之前暂停由SPMD创建的一个线程?因为线程2只有有限大小的缓冲区来接受来自线程1的数据,并且根据matlab,labSend()将在数据传输完成之前返回,这意味着理论上线程1可以继续向线程2发送数据,直到系统运行内存不足:在Matlab中使用SPMD发送数据

我想要做的是这样的:

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

如果你想实验室1至2实验室已经完成它的每个labSend后等待的labRecieve,然后在labBarrier每个这将导致实验室1简单的添加等到所有线程都达到这一点。

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发送太多单一labSend你总是可以有实验室2第一次发送的缓冲区大小。