Grokking concurrency, message passing and Co

Simen kjaeraas simen.kjaras at gmail.com
Sun Jul 11 10:48:48 PDT 2010


Philippe Sigaud <philippe.sigaud at gmail.com> wrote:

> - Why is a 2 threads version repeatedly thrice as fast as a no thread  
> version?
> I thought it'd be only twice as fast.

No idea.


> - 1024 threads are OK, but I cannot reach 2048. Why? What is the limit  
> for the
> number of spawn I can do? Would that be different if each threads spawn  
> two
> sub-threads instead of the main one generating 2048?

How many can you do, and what happens when you can't make more?


> - What is the official way to verify that all threads are done? As you  
> can
> see, I used a while loop, but I'm reaching in the dark, there.

Tids pass a message of type MsgType.LinkDead when they close.
I'm not entirely sure how to check this, as I have no experience with
std.concurrency.

There is also thread_joinAll in core.thread, which "Joins all non-daemon
threads that are currently running."


> - I have to read TDPL again: in thread, is there any way to get the Tid  
> of the
> thread that spawned you apart from waiting for it to send its Tid?

No. However, there is a private TLS variable in std.concurrency that
refers to the Tid of the owner thread.

Also, you could consider sending it as part of the function parameters.


> - is there any way to broadcast a message to a list of threads?

Nope. Well, of course, one could make a function what does it.

-- 
Simen


More information about the Digitalmars-d-learn mailing list