日期:2014-05-16  浏览次数:20797 次

关于互斥量类型属性,在LINXU系统中为什么总是编译不通过?
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<sys/types.h>
#include<errno.h>
pthread_mutex_t mutex;
int count;
void *thread1(void *arg)
{ int err;
  printf("thread1 run\n");
  sleep(2);
  err=pthread_mutex_lock(&mutex);
  if(err!=0)
  strerror(err);
  err=pthread_mutex_lock(&mutex);
  if(err!=0)
  strerror(err);
  printf("thread1 over\n");
  return ((void *)0);
   
}
void *thread2(void *arg)
{
  int err;
  printf("thread2 run\n");
  err=pthread_mutex_lock(&mutex);
  if(err!=0)
  printf("thread2 pthread2_mutex fail\n");
  count++;
  pthread_mutex_unlock(&mutex);
  printf("count=%d",count);
  return ((void *)0);
   
}
int main(void)
{ int err;
  pthread_t tid1,tid2;
  pthread_mutexattr_t mutexattr;
  err=pthread_mutexattr_init(&mutexattr);
  if(err!=0)
  strerror(err);
  err=pthread_mutexattr_setpshared(&mutexattr,PTHREAD_PROCESS_PRIVATE);
  if(err!=0)
  strerror(err);
  err=pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_NORMAL);//编程的时候总是说PTHREAD_MUTEX_NORMAL错误
  if(err!=0)
  strerror(err);
  err=pthread_mutex_init(&mutex,&mutexattr);
  if(err!=0)
  printf("mutex chushihuaishibai\n");
  err=pthread_create(&tid1,NULL,thread1,NULL);
  if(err!=0)
  printf("thread1 pthread_create fail\n");
  err=pthread_create(&tid2,NULL,thread2,NULL);
  if(err!=0)
  printf("thread2 pthread_create fail\n");
  pthread_join(tid1,NULL);
  pthread_join(tid2,NULL);
  pthread_mutexattr_destroy(&mutexattr);
  pthread_mutex_destroy(&mutex);
  return 0;
   
   
   
}

这是我的写的个测试 互斥量类型属性的小程序 编译的时候总是说PTHREAD_MUTEX_NORMAL未定义过,我上面有包含<pthread.h>头文件,不知道错在哪里,请高手指点

------解决方案--------------------
两个办法
1. 编译命令行加个选项 -D_GNU_SOURCE
2. 用 PTHREAD_MUTEX_TIMED_NP 代替 PTHREAD_MUTEX_NORMAL
------解决方案--------------------
是-D__USE_UNIX98
探讨
看一下/usr/include/pthread.h
有关代码是这样的:

C/C++ code
/* Mutex types. */
enum
{
PTHREAD_MUTEX_TIMED_NP,
PTHREAD_MUTEX_RECURSIVE_NP,
PTHREAD_MUTEX_ERRORCHECK_NP,
PTHREAD_MUTEX_ADAPTIVE_NP
……