Modern programming languages with shared-memory multithreading must define a memory-consistency model to determine when (or if) writes to shared memory by one thread become visible to other threads. The recently standardized C++ memory model provides sequential consistency for data-race free programs and no guarantees (so-called "catch-fire semantics") for programs with data races. We have defined an interference-free region to be a generalization of a synchronization-free region; it is a specific region around a memory access that can include synchronization release operations before the access and synchronization acquire operations after the access. We have shown that if another thread has a conflicting memory access that is unsynchronized with respect to the interference-free region, then the accesses must form a data race. We have used this natural notion for two applications: compiler optimizations, such as redundant-read elimination (even across some synchronization operations), and a dynamic data-race detection tool. This project is being done in collaboration with Hans-J. Boehm, Dhruva Chakrabarti, and Pramod Joisha at HP Labs.