Timon Gehr Wrote: > 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?
datafile is just a set of parameters for configuring the engine, i.e location of data, parameter values, etc. In this setting it would be the same for each engine.