Разве это не делает то, что вы ожидаете?
Первый вызов получает блокировку, а второй будет блокироваться до тех пор, пока не будет снята первая блокировка (pthread_mutex_unlock
). Вот что делают замки.
Из документации:
«Если мьютекс уже заблокирован, вызывающий поток блокируется, пока мьютекс не станет доступным.»
Возможно, вы хотите pthread_mutex_trylock
? Трудно сказать, если мы не знаем, чего вы пытаетесь достичь.
ИСПРАВЛЕНИЕ:
Я не видел, чтобы вы устанавливали PTHREAD_MUTEX_RECURSIVE .... Позвольте мне подумать об этом еще немного.
ПОСЛЕ МЫШЛЕНИЯ:
Судя по поиску Google CodeSearch, похоже, что PTHREAD_MUTEX_RECURSIVE реализован не во всех библиотеках. Вы можете попробовать PTHREAD_MUTEX_RECURSIVE_NP или сделать что-то необычное, чтобы обойти это.