Mutexとは、あるリソースに対して複数のスレッドがリソースの取り合いをして、競合を起こさないようにする為の仕組みです。
まず、複数のスレッド間で参照するリソースに対してそれぞれMutexを用意します。リソースを参照する時は、Mutexをロックしてリソースを使用中である事を他のスレッドに対して明示します。リソースの使用が終わったら、Mutexをアンロックして他のスレッドにリソースを解放します。
Mutexをロックする時に、既にそのMutexが使用中だった場合の動作は、Mutexのタイプによって異なりますが、Mutexの使用権が回ってくるまでブロックするか、あるいはロックに失敗したとみなします。
リソースを長時間占有する場合は、Mutexを使うべきではありません。Mutexを用いたリソースの占有は、出来る限り短時間で済む物に対してのみ行うようにします。長時間リソースを占有したい場合は、Condition Variableを使うべきです。
Mutexの確保・ロック・アンロック・解放は全てプログラマの手に委ねられます。pthreadが何かしてくれるという事はありません。
アレゲはアレゲを呼ぶ -- ある傍観者