Think about your answer, then reveal below.
Model answer: If a mutable value has a linear type, it can be owned by exactly one thread at a time — the type system prevents two threads from simultaneously holding a reference to the same mutable data. To share data between threads, you must explicitly transfer ownership (consuming the value in the sender and creating it in the receiver) or use a synchronization primitive. Since data races require two threads accessing the same memory with at least one writing, and linear types prevent shared mutable access, data races are ruled out by construction.
This is the insight behind Rust's concurrency safety guarantees ('fearless concurrency'). The borrow checker ensures that mutable references are unique (at most one &mut T) and shared references are immutable (multiple &T, no mutation). This is a form of affine discipline applied to references: a mutable reference is used linearly (exactly one owner), preventing concurrent mutation. The safety guarantee is static — no runtime overhead, no data race possible in safe Rust.