The "no gc" crowd

Jonathan M Davis jmdavisProg at gmx.com
Thu Oct 10 22:38:21 PDT 2013


On Thursday, October 10, 2013 19:08:02 Andrei Alexandrescu wrote:
> On 10/10/13 7:04 PM, Jonathan M Davis wrote:
> > On Thursday, October 10, 2013 18:21:52 Andrei Alexandrescu wrote:
> >> You can't EVER expect to obtain all of that magic by plastering "shared"
> >> on top of your type.
> > 
> > It works just fine with the idiom that I described where you protect the
> > usage of the object with a lock, cast it to thread-local to do stuff on
> > it, and then release the lock (making sure that no thread-local
> > references remain).
> TDPL describes how synchronized automatically peels off the "shared" off
> of direct members of the object. Unfortunately that feature is not yet
> implemented.

I think that it's generally overkill to create a whole class just to protect 
one shared object. Simply protecting it when you need to with mutex or 
synchronized block should be enough, and I don't see the cast as being all 
that big a deal. What TDPL describes is essentially the same except that the 
compiler does it automatically, but it forces you to create a class just for 
that. And as Michel points out, removing shared on a single level is 
frequently not all enough.

I think that synchronized classes have their place, but I also think that 
they're overkill for most situations. Why should I have to create a class just 
so that I can make a variable thread-local so that I can operate on it? I can 
do the same with a cast without the extra overhead and a lot more flexibly, 
since a cast doesn't have the single-level restriction that a synchronized 
class does.

- Jonathan M Davis


More information about the Digitalmars-d mailing list