On 24.09.2013 23:05, Andrei Alexandrescu wrote:
Taking the current array implementation as an example, the deltas are
computed before the actual GC lock happens inside gc_extend which means
that the second of two concurrent requests leads to overallocation.
(I'm confused - which array implementation?)
I mean the dynamic array implementation in rt.lifetime.
Does this qualify as an
implementation bug, or are you referring to the case where the void[]
being reallocated is being shared?
Yes, I'm referring to a shared void[], e.g. strings which use immutable
shared buffers that you can still append to if you are not stomping
other data.
Appending to it does not need a lock for the whole operation, but only
an atomic operation when adding to the stored size (though the
implementation uses a synchronized block to change the size).