pthread_mutex_errorcheck_np 初始化错误

InQ*_*ive 2 c mutex pthreads

下面的代码给了我编译错误:

#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);

}
Run Code Online (Sandbox Code Playgroud)

错误是:

 error: invalid initializer
 pthread_mutex_t mutex= PTHREAD_MUTEX_ERRORCHECK_NP;
Run Code Online (Sandbox Code Playgroud)

我的 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
};
Run Code Online (Sandbox Code Playgroud)

为什么会出现这个编译错误?我无法通过谷歌搜索得到任何明确的答案。我在用gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

我用于编译的命令: gcc prog.c -lpthread

Ulf*_*zer 5

您需要在使用PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP'=' 静态初始化互斥锁时使用(注意额外的_INITIALIZER)。PTHREAD_MUTEX_ERRORCHECK_NP用于在运行时使用pthread_mutex_init(3).

用起来-pthread-lpthread顺便说得好。例如,它设置预处理器标志以使某些函数可重入。