Research Article
A Study of Lock-Free Based Concurrent Garbage Collectors for Multicore Platform
Algorithm 2
Stack scanning procedure of collector thread.
Procedure StackScanningByCollector(startAddr: Address) | begin | (1) oldHead:= head | (2) if oldHead = NULL then | (3) newHead:= Create-New-Frame(starAddr, 0, NULL) | (4) CAS(&head, newHead, oldHead); //ENSURE THAT THERE'S ONLY ONE HEAD | (5) currFrame:= head | (6) while !is-EndOfStack(currFrame.FrameAddr) then | (7) if !currFrame.isScanned then //CHECK WHETHER THE FRAME HAS EVER BEEN SCANNED | (8) if 0 = CAS(&currFrame.isScanned, 1, 0) then | (9) ScannAndSave(currFrame) | (10) currFrame.nextFrame:= Get-Next-Frame(currFrame.FrameAddr) | (11) currFrame:= currFrame.nextFrame //CONTINUE WITH THE NEXT FRAME | end |
|