Difference between revisions of "Channel"

From Mesham
Jump to navigationJump to search
(Created page with ' == Syntax == channel[a,b] Where ''a'' and ''b'' are both distinct processes which the channel will connect. == Semantics == The ''channel'' type will specify that a variable…')
 
Line 1: Line 1:
 
 
== Syntax ==
 
== Syntax ==
  
Line 8: Line 7:
 
== Semantics ==
 
== Semantics ==
  
The ''channel'' type will specify that a variable is a channel from process ''a'' (sender) to process ''b'' (receiver.) Normally this will result in synchronous communication, although if the ''async'' type is used then asynchronous communication is selected instead. Note that channel is unidirectional, where process a sends and b receives, NOT the otherway around.
+
The ''channel'' type will specify that a variable is a channel from process ''a'' (sender) to process ''b'' (receiver.) Normally this will result in synchronous communication, although if the ''async'' type is used then asynchronous communication is selected instead. Note that channel is unidirectional, where process a sends and b receives, NOT the otherway around.<br><br>
 +
''Note:'' By default (no further type information) all channel communication is blocking using standard send.<br>
 +
''Note:'' If no allocation information is specified with the channel type then the underlying variable will not be assigned any memory - it is instead an abstract connection in this case.
  
 
== Example ==
 
== Example ==
Line 14: Line 15:
 
  var x:Int::allocated[multiple[]];
 
  var x:Int::allocated[multiple[]];
 
  var p;
 
  var p;
  par p from 0 to 2
+
  par p from 0 to 2 {
{
 
 
     (x::channel[0,2]):=193;
 
     (x::channel[0,2]):=193;
 
     var hello:=(x::channel[0,2]);
 
     var hello:=(x::channel[0,2]);

Revision as of 17:09, 12 January 2013

Syntax

channel[a,b]

Where a and b are both distinct processes which the channel will connect.

Semantics

The channel type will specify that a variable is a channel from process a (sender) to process b (receiver.) Normally this will result in synchronous communication, although if the async type is used then asynchronous communication is selected instead. Note that channel is unidirectional, where process a sends and b receives, NOT the otherway around.

Note: By default (no further type information) all channel communication is blocking using standard send.
Note: If no allocation information is specified with the channel type then the underlying variable will not be assigned any memory - it is instead an abstract connection in this case.

Example

var x:Int::allocated[multiple[]];
var p;
par p from 0 to 2 {
   (x::channel[0,2]):=193;
   var hello:=(x::channel[0,2]);
};

In this case, x is a channel between processes 0 and 2. In the par loop process 0 sends the value 193 to process 2. Then the variable hello is declared and process 2 will receive this value.