I think that problem is based on logic of the current position during the race which was never really discussed. So they don't finish the race? Could you speed up the CPU so they finish, or wait? Or you could do - for each Racer ordered by current position, and not finished, set final position to global var and add 1.
Also if that global var is stuck at 2 that means just 1 Racer completed the laps ? confusing. I would check the variable in debug view to see if it is adding 1 as racers finish and setting their final position. And what is cpu_alive ?