A mutex (mutual exclusion lock) is a gate that only one thread can hold at a time. A thread locks it before touching shared data and unlocks it when done. Others must wait.
By forcing threads to take turns, a mutex serializes access to a critical section. The lost-update problem vanishes because no two threads read-modify-write the same value at once.
mutex.lock();
counter = counter + 1; // no other thread runs this line now
mutex.unlock();
The cost is real. While one thread holds the lock, others block and do nothing. Hold it too long and you turn parallel work back into sequential work.
So a mutex trades some throughput for correctness. Lock only the shared state, keep the region small, and always release even when errors happen.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓