A race condition means that timing or ordering of events can impact the result of execution.
A data race happens when there are two memory access that are
- at same location
- performed concurrently and not synchronized
- not both read
There are considerable overlaps but it is possible to have a race condition without a data race or vice versa.