The first example shows that you "can't violate memory safety with safe
Rust" and the second example shows that you "can violate memory safety
with unsafe Rust".
The second example does not demonstrate a data race since there is only
one thread touching `data`.
One might carelessly misread a sentence that begins “data races
are *mostly* prevented” as suggesting that Rust fails to prevent some
data races. Clarify the intended reading.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
The section on preventing general race conditions is a bit hand wavy. Change
wording to be more concrete, and add an example of Rust preventing general
races in a very specific case.