Ответ 1
Он сложный и отличается от Unix вариантом Unix.
В Linux используется, например, система под названием Futex (Short for Fast Userpace Mutex).
В этой системе выполняется операция атомарного приращения и проверки в переменной mutex в пользовательском пространстве.
Если результат операции указывает на отсутствие конкуренции на блокировке, вызов pthread_mutex_lock возвращается без переключения контекста в ядро, поэтому операция приема мьютекса может быть очень быстрой.
Только если обнаружен конфликт, происходит системный вызов (называемый futex) и контекстный переключатель в ядро, которое заставляет вызывающий процесс спать до тех пор, пока не будет выпущен мьютекс.
Есть много других подробностей, особенно для надежных и/или приоритетных мьютексов наследования, но в этом суть.
Подробнее см. http://linux.die.net/man/2/futex и http://en.wikipedia.org/wiki/Futex