Must use volatile reads for correctness.