Removing The Global GC Lock: Largest Plausible Number of Threads?

Walter Bright newshound2 at digitalmars.com
Wed May 11 21:52:32 PDT 2011


On 5/11/2011 9:14 PM, dsimcha wrote:
> I'm thinking about ways to remove the global lock from the garbage collector for
> most small allocations. I'm basically thinking of making the free lists thread
> local. Every scheme I can come up with that doesn't require a radical overhaul
> of the current implementation requires every thread having a unique ID. I want
> to do this as simply and efficiently as possible, preferably using dense
> integers. Is it reasonable to assume that no program will ever need more than 2
> ^^ 16 thread (about 65,000) simultaneously so that I can store these indices as
> ushorts? If a program creates a lot of short-lived threads, the indices will be
> recycled, so having a huge number of threads non-simultaneously is not a problem.

I suggest one of two schemes:

1. Use thread local storage to store the free list for each thread.

2. Use a global free list, and use CAS to pull allocations off of it.


More information about the Digitalmars-d mailing list