 This means that at any given time, different threads may see different values for the same shared data.In a single-threaded environment, it is easy to reason about code execution.The typical approach requires the system to implement "as-if-serial" semantics for individual threads in isolation.