On 2015-09-04 17:32:48 +0000, Justin Whear said:
How would receive know?
Well, it could be pretty simple. At the moment:
receive(
int ...,
long ...,
myStruct ...
)
Will wait for one out of the three. So it's an OR.
reveive_all(
int ...,
long ...,
myStruct ...
)
would finish if every type was returned once (maybe at least once).
With this I would have an AND combination.
If you're using std.concurrency, the receiving
function needs to encode doneness, e.g.
const numJobs = 4;
foreach (_; 0 .. numJobs)
receive(...);
That's what you can do if the type is the same. Or just put four
receives sequentially in the code. The not so nice side effect is, that
you define an order for processing but the tasks might finish in an
other order. So, possible work is blocked.
Or you could use std.parallelism:
foreach (pieceOfWork; parallel(listOfWork))
doIt(pieceOfWork);
My "pieceOfWork" is not the same. So I don't have the case: Do 4 time
this 1thing. Instead, do 1 time these 4 things.
--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster