== Quote from Jason House (jason.james.ho...@gmail.com)'s article > Jarrett Billingsley Wrote: > > On Mon, Apr 20, 2009 at 5:03 PM, Sean Kelly <s...@invisibleduck.org> wrote: > > > > > The horrible thing about all this is it makes using a multithreaded > > > WeakRef horribly slow. �Even if the GC facility were provided for > > > what you want to do you're talking about acquiring a mutex in > > > the GC for every deref operation. �What a mess. > > > > Then take a hint from D2 and make them thread-local by default ;) But > > provide a SharedWeakRef for the cases where you need it. > I'm pretty sure the GC can bypass thread locality for mark and sweep, so > thread local won't help. Anything that stops the sweep from occurring in parallel with a thread using the data bypasses this issue.
Yeah. The unfortunate tradeoff is that finalizers are run while all these app threads are suspended, and if these finalizers enter a synchronized block they're likely to deadlock. This happened enough with the Phobos GC that I was motivated to make the change in the first place. It's unfortunate, but at least WeakRef is the only victim of the current approach that I'm aware of.