Annex F (informative) Core undefined behavior [ub]

F.2 [basic]: Basics [ub.basic]

F.2.20[ub:intro.races.data]
Specified in: [intro.races]

The execution of a program contains a data race if it contains two potentially concurrent conflicting actions, at least one of which is not atomic, and neither happens before the other, except for the special case for signal handlers described in [intro.races].
Any such data race results in undefined behavior.
[Example 1: int count = 0; auto f = [&] { count++; }; std::thread t1{f}, t2{f}, t3{f}; // undefined behavior t1, t2 and t3 have a data race on access of variable count — end example]