实验室
同时将数据发送到并接收来自另一名工人的数据
句法
datareceived = labSendReceive(rcvwkridx,srcwkridx,datasent)
datareceived = labSendReceive(rcvwkridx,srcwkridx,datasent,tag)
参数
|
发送给接收工人的发送工人的数据;任何MATLAB®数据类型。 |
|
接收工人接受的数据。 |
|
|
|
|
|
非负整数以识别数据。 |
描述
datareceived = labSendReceive(rcvwkridx,srcwkridx,datasent)
发送数据标准
给工人Labindex
是rcvwkridx
,并收到DataReceived
来自工人Labindex
是srcwkridx
。参数的值rcvwkridx
和srcwkridx
必须是标量。从概念上讲,此功能等同于以下呼叫序列:
LabSend(数据标准,RCVWKRIDX);datareceived = labReceive(srcwkridx);
在重要的例外,数据的发送和接收同时发生。这可以消除如果等效呼叫,否则可能会发生的僵局实验室
会阻止。
如果rcvwkridx
是一个空数组,实验室
不发送数据,而只会接收。如果srcwkridx
是一个空数组,实验室
不接收数据,而只会发送。
datareceived = labSendReceive(rcvwkridx,srcwkridx,datasent,tag)
使用指定的标签进行通信。标签
可以是任何来自的整数0
到32767
。
例子
在每个工人上创建一组唯一的数据,并将每个工人的数据转移到右边Labindex
)。
首先使用魔法
为变体数组创建唯一值的函数mydata
在每个工人上。
mydata =魔术(LabIndex)
实验1:mydata = 1实验2:mydata = 1 3 4 2实验室3:mydata = 8 1 6 3 5 7 4 9 2
在任一侧定义工人,以便每个工人都会在工人的“左派”上接收数据,同时以“右”向工人发送数据,将最终工人的骑自行车数据循环回开始工作。
rcvwkridx = mod(labindex,numlabs) + 1;右边的一名工人srcwkridx = mod(labindex -2,numlabs) + 1;百分比左边的一个工人
传输数据,发送每个工人的mydata
进入下一个工人其他达塔
变量,将第三名工人的数据包装回第一个工人。
其他data = labsendreceive(rcvwkridx,srcwkridx,mydata)
实验室1:其他数据= 8 1 6 3 5 7 4 9 2实验2:其他数据
将数据传输到下一个工人的情况下,而没有将数据从最后一个工人包装到第一个工人。
如果labindex别的rcvwkridx = [];结尾;如果LabIndex> 1;srcwkridx = labindex -1;别的srcwkridx = [];结尾;其他data = labsendreceive(rcvwkridx,srcwkridx,mydata)
实验室1:其他data = []实验2:其他data = 1实验室3:其他data = 1 3 4 2