draft proposal for ref counting in D
Walter Bright
newshound2 at digitalmars.com
Wed Oct 9 19:28:42 PDT 2013
Michel Fortin wrote:
Le 30-juin-2013 à 20:25, Steven Schveighoffer a écrit :
> A->B->C->A
>
> this is a cycle. Imagine that nobody else is pointing at A, B or C. Fine.
The GC starts to collect this cycle.
>
> But let's say that D is not being collected *AND* B has a reference to D.
>
> B could be getting destroyed in one thread, and decrementing D's reference
count, while someone else in another thread is incrementing/decrementing D's
reference count.
>
> I agree that RC optimally is thread-local. But if you involve the GC, then
ref incs and decs have to be atomic.
Exactly what I was trying to explain. Thanks.
> I don't think this is that bad. iOS on ARM which has terrible atomic
primitives uses atomic reference counts.
Moreover iOS uses a single spinlock to protect a global hash table containing
all reference counts.
> If you do NOT involve the GC and are careful about cycles, then you could
potentially have a RC solution that does not require atomics. But that would
have to be a special case, with the danger of having cycles.
Not involving the GC is quite difficult: you need to be absolutely sure you have
no pointer pointing to that thread-local ref-counted object anywhere in the
GC-heap. Unfortunately, there's no way to guaranty statically what is part of
the GC heap and what is not, so any non-atomic reference counter is not @safe.
More information about the Digitalmars-d
mailing list