Difference between revisions of "Channel"
(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.