[dmd-concurrency] Vot de hekk is shared good for, anyway?

Graham St Jack graham.stjack at internode.on.net
Mon Jan 11 21:48:16 PST 2010


Andrei Alexandrescu wrote:
>> I understand what you are saying, but your example is for 
>> inter-process communications, and the shared objects you talk about 
>> are external to the process, in non-D code.
>>
>> I also understand that the messaging library is attempting to make 
>> inter-thread, inter-process and inter-node communications all look 
>> the same. I'm not sure this is a good idea, and I for one would like 
>> to have a version of the messaging API that used blatantly shared 
>> objects for good old-fashioned inter thread message passing. If such 
>> a thing doesn't eventuate, I for one would like to be able to build 
>> one without having to resort to back-door tricks.
>
> The short answer is that there won't be an easy way to continue "good" 
> (?) old-fashioned multithreaded programming in D with blatant (e.g. 
> unchecked) sharing. That's a bad habit that we don't need and don't 
> want to support.
>
> Inter-thread and inter-process communication will obey different 
> limitations, but they do have a common subset that we'll expose. That 
> will help programmer in creating location-unaware concurrency.
>
>> With communication between threads within a process, we are looking 
>> at using the shared keyword to primarily indicate which objects are 
>> potentially shared. I still think it is a cop-out to say "this shared 
>> object is safe to use, so lets pretend it isn't shared". Sure, that 
>> avoids the problems associated with the viral nature of the shared 
>> keyword, but does nothing to help us understand how to get the design 
>> of shared right.
>
> I don't know what you mean. There's no pretense that shared objects 
> are actually not shared, but I'm sure I'm missing a point.
Almost all my multi-threaded code uses a synchronized queue template for 
inter-thread communication, and I always transfer immutable or by-value 
data.

It looks like this:

Producer Thread ---(add)---> Queue <---(remove)---- Consumer Thread.

The Queue is shared between the two threads, and all of its public 
methods are synchronized. The Queue is shared, but the messages are 
immutable.

My assertion is that Queue (and any other classes like it) should be 
marked as "shared", so we clearly understand where our threads are in 
contact, and so the compiler can help us keep to the straight and narrow.

My question is "what are we going to do with the language to stop shared 
from infecting the entire application", which is what always happened to 
me in the past whenever I attempted to define Queue to be a shared class.

>
>
> Andrei
> _______________________________________________
> dmd-concurrency mailing list
> dmd-concurrency at puremagic.com
> http://lists.puremagic.com/mailman/listinfo/dmd-concurrency



More information about the dmd-concurrency mailing list