Ho provato a creare un mutex ricorsivo in questo modo:

pthread_mutex_t mutexMenu =PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;

il compilatore però mi dice che:

error: 'PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP' undeclared here (not in a function)

ovviamente ho incluso la libreria con l'istruzione

#include<pthread.h>

se invece definisco il mutex non ricorsivo cioè così:

pthread_mutex_t mutexMenu =PTHREAD_MUTEX_INITIALIZER;

il compilatore genera l'eseguibile correttamente

siccome la libreria da cui attinge il codice i mutex è la pthread.h sono andato a guardarla e ho trovato questo

#define PTHREAD_MUTEX_INITIALIZER \
{0, 0, 0, PTHREAD_MUTEX_TIMED_NP, __LOCK_ALT_INITIALIZER}
#ifdef __USE_GNU
# define PTHREAD_RECURSIVE_MUTEX
_INITIALIZER_NP \
{0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, __LOCK_ALT_INITIALIZER}
# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
{0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, __LOCK_ALT_INITIALIZER}
# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
{0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, __LOCK_ALT_INITIALIZER}
#endif

cosa sto sbagliando?perchè non mi compila il mutex ricorsivo?