_GNU_SOURCE
не будет ничего делать для раскрытия расширений библиотеки в Mac OS, потому что Mac OS не из проекта GNU и не использует библиотеку GNU C.
В Mac OS макрос выбора функции «открыть расширения» - _DARWIN_C_SOURCE
.
Однако, это не обязательно покажет PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
; Я не думаю, что это существует. Конечно, существует рекурсивный тип мьютекса PTHREAD_MUTEX_RECURSIVE
; только нет инициализатора для статической настройки. Код должен быть перенесен для явного вызова pthread_mutex_init
для инициализации его рекурсивных мьютексов.
Другая идея - просто написать код, который не требует рекурсивных мьютексов. Рекурсивные мьютексы предназначены для параллельного программирования по принципу «разброс мозгов». «Ну, я не знаю, есть ли у меня этот замок или нет, поэтому я на всякий случай его возьму». Разумная альтернатива - разработать программу, чтобы вы знали!
Рекурсивные мьютексы - это, по сути, решение для поддержки бинтов в определенных ситуациях, которые возникают, когда устаревший однопоточный код преобразуется в многопоточность. Рекурсивные мьютексы неуместны в совершенно новом дизайне.
Если вы избегаете рекурсивных мьютексов, вы можете использовать стандарт PTHREAD_MUTEX_INITIALIZER
.