pthread_mutex_errorcheck_np初始化错误
pthread_mutex_errorcheck_np initialization error
下面的代码给我编译错误:
#include<pthread.h>
#include<stdio.h>
pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
int i=0;
void *func(void *a)
{
pthread_mutex_lock(&mutex);
i++;
printf("The value of thread is: %d\n",i);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main()
{
pthread_t id1,id2;
if(pthread_create(&id1,NULL,func,NULL)<0)
perror("pthread_create error\n");
pthread_join(id1,NULL);
pthread_join(id2,NULL);
}
错误是:
error: invalid initializer
pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
我的pthread.h相关内容是:
enum
{
PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_ADAPTIVE_NP
#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
,
PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
#endif
#ifdef __USE_GNU
/* For compatibility. */
, PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
#endif
};
为什么会出现这个编译错误?我无法通过谷歌搜索得到任何明确的答案。
我正在使用 gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
我编译时使用的命令:gcc prog.c -lpthread
当用'='静态初始化互斥量时需要使用PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
(注意额外的_INITIALIZER
)。 PTHREAD_MUTEX_ERRORCHECK_NP
用于在运行时使用 pthread_mutex_init(3)
.
初始化它
顺便说一句,用-pthread
比用-lpthread
好。例如,它设置预处理器标志以使某些函数可重入。
下面的代码给我编译错误:
#include<pthread.h>
#include<stdio.h>
pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
int i=0;
void *func(void *a)
{
pthread_mutex_lock(&mutex);
i++;
printf("The value of thread is: %d\n",i);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main()
{
pthread_t id1,id2;
if(pthread_create(&id1,NULL,func,NULL)<0)
perror("pthread_create error\n");
pthread_join(id1,NULL);
pthread_join(id2,NULL);
}
错误是:
error: invalid initializer
pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
我的pthread.h相关内容是:
enum
{
PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_ADAPTIVE_NP
#if defined __USE_UNIX98 || defined __USE_XOPEN2K8
,
PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
#endif
#ifdef __USE_GNU
/* For compatibility. */
, PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP
#endif
};
为什么会出现这个编译错误?我无法通过谷歌搜索得到任何明确的答案。
我正在使用 gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
我编译时使用的命令:gcc prog.c -lpthread
当用'='静态初始化互斥量时需要使用PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
(注意额外的_INITIALIZER
)。 PTHREAD_MUTEX_ERRORCHECK_NP
用于在运行时使用 pthread_mutex_init(3)
.
顺便说一句,用-pthread
比用-lpthread
好。例如,它设置预处理器标志以使某些函数可重入。