Considerations
Consdier all mutex operations to be atomic.
Don’t copy a mutex (but you can have as many pointers to the same mutex as you like).
You only need to destroy mutexes that you dynamically initialize.
Associate mutexes with the data they protect.