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

Reply via email to