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