On 3/26/2011 7:00 PM, Andrej Mitrovic wrote:
> Edit: It looks like I did almost the same as Jonathan advised.
>
> I'm looking forward to std.parallelism though. I'm thinking I'd
> probably use some kind of parallel foreach loop that iterates over 4
> files at once, and letting it do its work by spawning 4 threads. Or
> something like that. We'll see.
The way I've typically done this sort of pattern is with a thread pool that
gets its work from a queue. The main thread
shoves work into the queue and then calls a .join or .waitForEmpty sort of api
on the pool. So it'd look something like:
void workerFunc(string str) { ... }
auto tp = new ThreadPool(getNumCpus(), &workerFunc);
foreach(...)
tp.push(str);
tp.join();
This can suffer from queue size problems if the amount of work is awful, but
that's not a problem for the vast majority
of the cases I've had, so never worried about having the push capable of
blocking or otherwise throttling the producer side.