On 09/12/2011 08:01 PM, Jerry Quinn wrote:
Timon Gehr Wrote:

On 09/12/2011 07:23 PM, Jerry Quinn wrote:
I'm looking at porting an app that maintains a work queue to be processed by 
one of N engines and written out in order.  At first glance, std.parallelism 
already provides the queue, but the Task concept appears to assume that there's 
no startup cost per thread.

Am I missing something or do I need to roll a shared queue object?

I don't know if I get you right, but std.parallelism uses a task pool.
Usually no threads are started or stopped during processing.

OK I guess what I'm looking for is WorkerLocalStorage.  I can create an engine 
per thread.  However, I probably need to have each thread do the initialization 
work.  If I create the engine on the main thread, it won't be properly accessed 
by the worker thread, right?  I.e. I need each thread to run engine.init() 
which will do a whole pile of loading and setup first before I can start 
feeding data to the pool.

The impression I get is that

for (int i=0; i<  nthreads; i++)
   taskPool.workerLocalStorage(new engine(datafile))

will not get me what I want.



Calling workerLocalStorage once suffices.

auto engine=taskPool.workerLocalStorage(new Engine(datafile));

This will create one engine per working thread and and the same datafile.

You can access the engine from each thread with engine.get. What is the exact role of datafile? Does it have to be distinct for each engine?


Reply via email to