Mutexes always use the following sequence:.
Mutexes have always provided sufficient ordering and visibility guarantees.
Mutexes are designed to be held only for a short time;
OTOH, Mutexes and the like could always be done as a library.
Some resources cannot or should not be copied,
such as file handles or Mutexes.
If you use Mutexes to protect all your data, you really shouldn't need to worry.
Apart from the fact that Mutexes have an owner,
the two objects may be optimized for different usage.
Officially:"Mutexes are typically used to serialise access
to a section of re-entrant code that cannot be executed concurrently by more than one thread.
Although to be frank, unless you are an expert and working on some serious low-level code,
you should probably stick to Mutexes and condition variables.
The spec does not even say anything about the atomicity of memory loads and stores or the order
in which loads and stores might happen, never mind things like Mutexes.
Typically you would use Mutexes to control a synchronised resource where exclusive
access is only needed for very short periods of time, normally to make an update to a shared data structure.