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

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Mon Sep 15 11:41:06 PDT 2014


On 9/15/14, 11:28 AM, Sean Kelly wrote:
> 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.

That's news to me. Perhaps it's weak pointer management they need to 
address?

> 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?

Non-immutable and non-shared RCStrings are the ticket.


Andrei


More information about the Digitalmars-d mailing list