next up previous contents index
Next: 5.5 Produzenten Konsumenten Beispiel Up: 5 PVM Parallel Virtual Previous: 5.3 Packen und Versenden

5.4 Empfangen und Entpacken

Im folgenden wollen wir das Sprachkonstrukt

receive chan tex2html_wrap_inline2841
implementieren.  Zur Verfügung stehen uns die PVM-Funktionen recv, nrcv und upk[typ] mit den folgenden Spezifikationen.

int pvm_upk[typ] (typ *x; int n, int s);
Entpackt n Elemente mit stride s von dem Array x vom Typ typ 
in den aktuellen Sendepuffer.

int pvm_recv (int tid, int msgtag);
Empfangen des aktuellen Sendepuffers von task tid mit message tag msgtag.
  

Die Version pvm_nrcv  ist eine nicht blockierende Variante von pvm_recv. Der Rückgabewert ist hierbei 0 falls keine Nachricht vorliegt, sonst ein Wert > 0 (ein buffer identifier).

Im Fehlerfall geben alle Routinen einen Wert < 0 zurück, sonst 0. typ kann wie oben bei pvm_pk sein: byte, int, long, float, complex, short, string und double.

Damit ist receive chan tex2html_wrap_inline2849 tex2html_wrap_inline2396

       VAR x1: ARRAY [0..1] OF t1; 
           ...
           xn: ARRAY [0..1] OF tn; 
 
       e:= pvm_recv (chan.task.tid, chan.msgtag);
       e:= pvm_upk[t1] (x1, 1, 1);
       v1:=x1[0]; 
       ...
       e:= pvm_upk[tn] (xn, 1, 1);
       vn:=xn[0];
 



parallel@rz.uni-mannheim.de
Mon Okt 28 14:38:25 PST 1996