**I think there may be some problem in your file locks.** To check whether the race is real, I set breakpoints before these two accesses when they are running in the call stack described above. I find that the breakpoints can be activated simultaneously, and the address of race variables are same. I think these result can prove that **the race actually happens**. So these accesses is not serialized successfully.