Proposal for a MessageQueue (was Re: public MessageBox)

Nathan M. Swan nathanmswan at gmail.com
Thu Mar 22 12:06:57 PDT 2012


On Thursday, 22 March 2012 at 15:53:56 UTC, Sean Kelly wrote:
> I can see adapting the API so that each thread has a default 
> message queue (keep in mind that we'll be adding interprocess 
> messaging at some point via the same routines). I'm not yet 
> clear how the existence of alternate message queues could be 
> communicated to other portions of the code though. register() 
> is one way I suppose. Really what's happening here is that Tid 
> is being replaced by a queue ID, not extended with a mutable 
> variable.

I think they would be passed as parameters to spawn or received 
from the default message queue.

> I guess Tid would become an alias for the Qid created when a 
> thread is spawned. What I really don't want though, is for 
> receive() to operate on a message queue created in a different 
> thread. Messaging would become substantially slower if 
> receive() had to be synchronized.

That's a drawback I haven't considered. To solve this, it would 
be made part of the contract that receiving must all be done in 
one thread.

I can't think of a use where receiving in multiple threads would 
apply, but if it would, a SynchronizedMessageQueue subclass could 
easily be drawn up that broadens the contract and synchronizes 
for receive().

BTW, how do you unittest just the std.concurrency module?



More information about the Digitalmars-d mailing list