``Parallel or'' is a classic idiom of parallel programming. The ``parallel or'' operation executes two
expressions F and G in parallel, each of which may publish a single boolean,
and returns the disjunction of their publications as soon as possible.
If one of the expressions publishes
true, then the disjunction is
so it is not necessary to wait for the other expression to publish a value.
This holds even if one of the expressions is silent.
The ``parallel or'' of expressions F and G may be expressed in Orc as follows:
val result = val a = F val b = G Ift(a) >> true | Ift(b) >> true | (a || b) result
(a || b) waits for both
b to become
available and then publishes their disjunction. However if either
b is true we can publish
true immediately regardless of whether the
other variable is available. Therefore we run
Ift(a) >> true and
Ift(b) >> true
in parallel to wait for either variable to become
true and immediately
publish the result
true. Since more than one of these expressions may
true, the surrounding
val is necessary to select and
publish only the first result.