关于线程属性pthread_attr_ t的问题

1080阅读 0评论2014-07-10 mxcai2005
分类:C/C++

在《linux 编程技术详解》这本书中讲到线程属性pthread_attr_t的定义是:

typedef struct

{

       int                               __detachstate;   线程的分离状态

       int                               __schedpolicy;  线程调度策略

       struct sched_param              __schedparam;  线程的调度参数

       int                               __inheritsched;  线程的继承性

       int                                __scope;       线程的作用域

       size_t                           __guardsize;   

       int                                __stackaddr_set;

       void *                          __stackaddr;   线程堆栈的位置

       size_t                           __stacksize;    线程栈的大小

}pthread_attr_t;


我在/usr/include/bits/pthreadtypes.h这个文件中找到pthread_attr_t的定义却是这样的:


typedef union
{
  char __size[__SIZEOF_PTHREAD_ATTR_T];
  long int __align;
} pthread_attr_t;

     之所以出现和两种不同的定义可能是因为pthread不想让用户空间看到它内部对pthread_attr_t的实现,因为API设计时就封装了这个类型。所以它只要提供和内部实现的pthread_attr_t大小一样的类型就可以了。

实际上,pthread内部对pthread_attr_
t的实现是
struct pthread_attr,它的内容和书上的内容基本上是一致的。同时在机子上测试可以看到这两个结构体的大小是相等的。


上一篇:在centos6.5 下编译zhcon-0.2.6
下一篇:基于CentOS 6.2制作自己的发行版