Escaping the Tyranny of the GC: std.rcstring, first blood

Sean Kelly via Digitalmars-d digitalmars-d at puremagic.com
Mon Sep 15 11:28:56 PDT 2014


On Monday, 15 September 2014 at 16:22:01 UTC, Andrei Alexandrescu
wrote:
> On 9/15/14, 8:58 AM, Rainer Schuetze wrote:
>
>> * immutable means implicitely shared between threads, so 
>> you'll have to make RCString thread-safe even if shared isn't 
>> explicitly supported.
>
> Hmmm, good point. That's a bug. Immutable postblit and dtors 
> should use atomic ops.
>
>> Unfortunately, I've yet to see an efficient thread-safe 
>> implementation of reference counting (i.e. without locks).
>
> No locks needed, just interlocked ++/--.

To be fair, you still have to be a bit careful here or things
could be optimized such that data is seen to disappear or change
when it's not expected to.  The original boost::shared_ptr used
an atomic integer as an internal refcount, and that's probably a
good template for how to do RC here.  The newer implementation is
a lot fancier with spinlocks and such, I believe, and is a lot
more complicated.

Also... this is why I'm not over-fond of having immutable being
implicitly shared.  Being unable to create an efficient RCString
that I know is thread-local (the normal case) kind of stinks.  
Maybe there can be a
template parameter option along these lines?


More information about the Digitalmars-d mailing list