Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Ryan way:
- ThreadLocalStorage Arena* scratchPool[MAX_SCRATCH_COUNT];
- ArenaTemp GetScratch(Arena **conflicts, U64 conflict_count)
- {
- Arena* freeArena = 0;
- // Loop through the scratch pool and find an arena that doesn't conflict with the conflicts array
- return ArenaTempBegin(freeArena);
- }
- #define ReleaseScratch(t) ArenaTempEnd(t)
- // My way:
- ThreadLocalStorage Arena* scratchPool[MAX_SCRATCH_COUNT];
- ThreadLocalStorage int currentFreeScratch; // Introducing a new thread-local integer
- ArenaTemp GetScratch(void)
- {
- Arena* freeArena = 0
- if (currentFreeScratch < MAX_SCRATCH_COUNT)
- freeArena = scratchPool[currentFreeScratch++];
- return ArenaTempBegin(freeArena);
- }
- #define ReleaseScratch(t) do { ArenaTempEnd(t); currentFreeScratch--; } while (0)
Advertisement
Add Comment
Please, Sign In to add comment