LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1674|回复: 13

读写锁的数据结构定义在哪啊????

[复制链接]
发表于 2005-9-6 21:03:14 | 显示全部楼层 |阅读模式
pthread_rwlock_t的定义在哪个头文件下,加了pthread.h但是不行.我的系统是REDHAT9.0的
发表于 2005-9-6 21:23:24 | 显示全部楼层
/usr/include/bits/pthreadtypes.h
在pthread.h中应该已经包含了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-6 21:44:39 | 显示全部楼层
多谢斑竹,pthread.h中的确包含了这个文件.但是在pthreadtypes.h定义读写锁的前面有个#ifdef __USE_UNIX98
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-7 21:46:11 | 显示全部楼层
问一下大侠,我在pthread.h前面加上了#define __USE_UNIX98但是还是不能使用pthread_rwlock_t.好像无法定义这个宏一样.我的系统是REDHAT9.0的
回复 支持 反对

使用道具 举报

发表于 2005-9-7 22:24:37 | 显示全部楼层
Post by chairman
问一下大侠,我在pthread.h前面加上了#define __USE_UNIX98但是还是不能使用pthread_rwlock_t.好像无法定义这个宏一样.我的系统是REDHAT9.0的


try to put "#define __USE_UNIX98" at the very beginning of the file
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-7 22:30:24 | 显示全部楼层
哦,敢问大侠,这样是什么意思啊?我在gcc编译的时候加上了-D__USE_UNIX98还是不行啊
回复 支持 反对

使用道具 举报

发表于 2005-9-8 10:00:33 | 显示全部楼层
那是因为在"include pthreadtpyes.h"头文件之前有可能其他的头文件已经include这个头文件,所以这时候,事实上这个头文件并没有包含,所以你需要将 "#define __USE_UNIX98"放在文件开头,当第一次包含这个头文件的时候,就能看到这个define.至于为什么在gcc编译的时候加上定义就不清楚了,等我分析一下gcc再回答你吧(猜测,gcc编译参数是放在所有头文件的后面的)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-8 10:34:16 | 显示全部楼层
嗯,我想会不会linux自己把这个宏给屏蔽了打不开啊.我写了个小函数入下:
#define __USE_UNIX98
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
   #ifdef __USE_UNIX98
      printf("ok\n");
   #endif
   return 1;
}
可以编译通过,但是打不出ok
回复 支持 反对

使用道具 举报

发表于 2005-9-8 11:00:34 | 显示全部楼层
try this:

  1. [rick@Fedora-Core test]$ cat test.c
  2. #include <stdio.h>
  3. #define __USE_UNIX98
  4. #include <bits/pthreadtypes.h>

  5. int main(argc,argv)
  6. int argc;
  7. char**argv;
  8. {
  9.         pthread_rwlock_t a;

  10. #ifdef __USE_UNIX98
  11.         printf("ok\n");
  12. #endif

  13.         return 0;
  14. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-8 11:15:20 | 显示全部楼层
如果把pthread_rwlock_t a;屏蔽的话可以运行,打印出OK.但是如果不屏蔽的话,gcc通不过.错误是无法识别pthread_rwlock_t
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表