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?