std.container.BinaryHeap + refCounted = WTF???

dsimcha dsimcha at yahoo.com
Mon Nov 29 07:58:05 PST 2010


== Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
> On Wed, 17 Nov 2010 12:09:11 -0500, dsimcha <dsimcha at yahoo.com> wrote:
> > == Quote from Steven Schveighoffer (schveiguy at yahoo.com)'s article
> >> The issue is that if you append to such an array and it adds more pages
> >> in
> >> place, the block length location will move.  Since each thread caches
> >> its
> >> own copy of the block info, one will be wrong and look at array data
> >> thinking it's a length field.
> >> Even if you surround the appends with a lock, it will still cause
> >> problems
> >> because of the cache.  I'm not sure there's any way to reliably append
> >> to
> >> such data from multiple threads.
> >> -Steve
> >
> > Would assumeSafeAppend() do the trick?
> >
> No, that does not affect your cache.  I probably should add a function to
> append without using the cache.
> -Steve

How about using std.array.Appender?  This looks safe as far as I can tell, but I
want to make sure there aren't any obscure implementation details that would
prevent this from working, too.


More information about the Digitalmars-d mailing list