std.parallelism.taskPool daemon threads not terminating

Moritz Maxeiner via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 17 10:22:54 PDT 2016


On Friday, 17 June 2016 at 14:29:57 UTC, Russel Winder wrote:
>
> A priori, assuming I am not missing anything, this behaviour 
> seems entirely reasonable.

I agree that when using non-daemon threads (and I personally 
think that should be the default) that it is. But I cannot bring 
that into accord with the documentation of taskPool (the 
property)[1]:

> Returns a lazily initialized global instantiation of TaskPool.
> [...]
> The worker threads in this pool are daemon threads, meaning 
> that it is not necessary to call TaskPool.stop or 
> TaskPool.finish before terminating the main thread.

> A daemon thread is automatically terminated when all non-daemon 
> threads have terminated.
> A non-daemon thread will prevent a program from terminating as 
> long as it has not terminated.

The above - while not explicitly stating that daemon-threads do 
not prevent a program from terminating - are - to me - strongly 
suggesting it (and if they do indeed not, then I would ask how 
daemon threads are differnt from non-daemon threads in the 
context of TaskPool, since I'm unable to make it out from the 
documentation).

> The task is an infinite loop so it never terminates. This means 
> the threadpool does not stop working, which means the program 
> does not terminate.

Yes, that example is intentionally chosen that way to make my 
point. I initially discovered this while putting of a synchronous 
read of STDIN in a loop, but that example might have diverted 
attention to something other than I intended.

>
> I suspect that daemon may not mean what you think it means. At 
> least not with respect to the threadpool.

I do, too, which is why I asked here, since after having read the 
relevant documentation several times with significant time delay 
in between I still cannot make out how else to interpret it (and 
I got no reply in #dlang IRC).

[1] https://dlang.org/library/std/parallelism/task_pool.html


More information about the Digitalmars-d-learn mailing list