You need one mutex by resource. The Mutex will control the access to
that object, giving exclusive permission for a thread to modify it.
If you have a list and a hash, for example, that will be shared by
three threads, you'll need two mutexes: one for the list, and one for
the hash. While a thread modifies the list, others can modify the
hash, and so on. It's a good practice to always synchronise multiple
mutexes in the same order, to prevent deadlocks.