std.parallelism: How to wait all tasks finished?

Cooler kulkin at hotbox.ru
Wed Feb 5 07:38:13 PST 2014


On Tuesday, 4 February 2014 at 03:26:04 UTC, Dan Killebrew wrote:
>>> It seems to me that worker threads will continue as long as 
>>> the queue isn't empty. So if a task adds another task to the 
>>> pool, some worker will process the newly enqueued task.
>>
>> No. After taskPool.finish() no way to add new tasks to the 
>> queue. taskPool.put will not add new tasks.
>
> Then perhaps you need to create a new TaskPool (and make sure 
> that workers add their tasks to the correct task pool), so that 
> you can wait on the first task pool, then wait on the second 
> task pool, etc.
>
> auto phase1 = new TaskPool();
> //make sure all new tasks are added to phase1
> phase1.finish(true);
>
> auto phase2 = new TaskPool();
> //make sure all new tasks are added to phase2
> phase2.finish(true);

Will not help. I don't know beforehand what tasks will be
created. procData is recursive and it decides create new task or
not.


More information about the Digitalmars-d-learn mailing list