‘PTHREAD_MUTEX_RECURSIVE’ undeclared

报错‘PTHREAD_MUTEX_RECURSIVE’ undeclared (first use in this function):

程序如下:

1 #include
2 #include
3 #include
4 #include
5

6 int main(int argc,char *argv[]){
7 pthread_mutex_t mutex;
8

9 if(argc < 2){
10 printf("-usage:%s [error|normal|recursive]\n",argv[0]);
11 exit(1);
12 }
13 pthread_mutexattr_t mutexattr;
14 pthread_mutexattr_init(&mutexattr);
15 if(!strcmp(argv[1],"error")){
16 pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_RECURSIVE);
17 }/*else if(!strcmp(argv[1],"normal")){
18 pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_NORMAL);
19 }else if(!strcmp(argv[1],"recursive")){
20 pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_RECURSIVE);
21 }
22 pthread_mutex_init(&mutex,&mutexattr);
23 if(pthread_mutex_lock(&mutex) != 0){
24 printf("lock failure\n");
25 }else {
26 printf("lock success\n");

27 }
28 if(pthread_mutex_lock(&mutex) != 0){
29 printf("lock failure\n");
30 }else {
31 printf("lock success\n");

32 }
33
34 pthread_mutex_unlock(&mutex);
35 pthread_mutex_unlock(&mutex);
36 pthread_mutexattr_destroy(&mutexattr);
37 pthread_mutex_destroy(&mutex); */
38
39
40 return 0;
41 }

请问怎么回事啊?谢谢

https://bbs.csdn.net/topics/260054382
这篇帖子有讨论递归锁编译时的未定义的错误问题。

对于 Linux 下的信号量/读写锁文件进行编译,需要在编译选项中指明-D_GNU_SOURCE
否则用 gcc 编译就会出现
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP 未声明(在此函数内第一次使用) 这样的提示。