I am new to multi-threading programming, and confused about how Mutex works. In the Boost::Thread manual, it states:

*Mutexes guarantee that only one thread can lock a given mutex. If a **code section** is surrounded by a mutex locking and unlocking, it's guaranteed that only a thread at a time executes that section of code. When that thread unlocks the mutex, other threads can enter to that code region:*

My understanding is that Mutex is used to protect a section of code from being executed by multiple threads at the same time, **NOT** protect the memory address of a variable. It's hard for me to grasp the concept, what happen if I have 2 different functions trying to write to the same memory address. 

Is there something like this in Boost library:

1. lock a memory address of a variable, e.g., double x, lock (x); So
that other threads with a different function can not write to x.
2. do something with x, e.g., x = x + rand();
3. unlock (x)

Thanks.