D2 weak references
Jason House
jason.james.house at gmail.com
Mon Apr 20 10:56:55 PDT 2009
Sean Kelly Wrote:
> Daniel Keep wrote:
> >
> > Sean Kelly wrote:
> >> Jason House wrote:
> >>> Jason House wrote:
> >>>
> >>>> Tango's GC (and therefore
> >>>> druntime's GC) has an explicit notification mechanism.
> >>> I guess I shouldn't have assumed that the features of tango became
> >>> part of druntime. I don't see any notification mechanism :(
> >> Same as Tango:
> >>
> >> alias void delegate(Object) DEvent;
> >> extern (C) void rt_attachDisposeEvent(Object h, DEvent e);
> >> extern (C) void rt_detachDisposeEvent(Object h, DEvent e);
> >>
> >> I should probably expose these in core.runtime.
> >
> > How are these events dispatched? I remember a discussion about race
> > conditions if these events were fired off after all threads had been
> > resumed; you could have the event zero out the weak ref AFTER something
> > else had dereferenced it.
>
> It's the responsibility of the person making the weak ref to make it
> thread-safe if that's a design consideration. If the cleanup is
> performed before the threads are restarted and the weak ref (or
> signal/slot mechanism) uses mutexes then a deadlock is possible. At
> least this approach provides the option for correct code to actually work.
>
> > If that's still a possibility, maybe you could add a case where if the
> > delegate's funcptr is null, it just assumes the context pointer points
> > to a void*.sizeof word and zeroes it out. You could do that without
> > resuming threads.
>
> This is all tied into the finalizer. To do what you suggest the GC
> would have to perform two sweeps--one before resuming threads and one after.
If I understand you correctly, a weak reference library needs to query the GC to see if an object is marked for collection. How do I do this?
More information about the Digitalmars-d
mailing list