Linux线程常见属性小结
2016-08-27 17:38
260 查看
我们知道现代操作系统一般都支持多线程,线程是操作系统调度的基本单位,进程是操作系统分派资源的基本单位,所以对线程属性的掌握也十分重要,首先让我们来看看pthread_attr_t这个结构体:
默认情况下新建一个线程属性变量,然后对其修改:
1.线程的分离状态:
这个状态决定了线程以一种什么样的方式来结束自己,一般有两种状态:
(1)非分离状态:创建的默认属性就是非分离状态,在这种状态下,原有线程等待创建线程结束,只有原有进程调用pthread_join()函数时,被创建的进程才能释放自己占有的系统资源。
(2)分离状态:在这种状态下创建的线程没有被其它线程所等待,自己运行结束了,线程就终止并且马上释放掉所占有的资源。下面我们就来看看相关函数:
假设我们创建一个detach线程:
2.线程的栈地址和栈大小
这个主题已经在我的博客http://blog.csdn.net/caoyan_12727/article/details/52281409讨论过,这里不再赘述!!!下面只列出一些相关函数:
3.线程调度策略:
4.线程栈末尾缓冲区大小:
线程属性guardsizei控制着线程栈末尾之后用以避免栈溢出的扩展内存的大小,这个属性默认值是有具体定义来实现的,但常用值是系统页大小。可以把guardsize线程属性设置为0,不允许属性的这种行为发生;在这种情况下,不会提供警戒缓冲区。同样,如果修改了线程属性stackaddr,系统会认为我们自己管理堆栈,进而使栈警戒缓冲区机制无效,这等同于吧guardsize线程属性设置为0;
//线程属性结构如下: typedef struct { int etachstate; //线程的分离状态 int schedpolicy; //线程调度策略 structsched_param schedparam; //线程的调度参数 int inheritsched; //线程的继承性 int scope; //线程的作用域 size_t guardsize; //线程栈末尾的警戒缓冲区大小 int stackaddr_set; //线程的栈设置 void* stackaddr; //线程栈的位置 size_t stacksize; //线程栈的大小 }pthread_attr_t;
默认情况下新建一个线程属性变量,然后对其修改:
1.线程的分离状态:
这个状态决定了线程以一种什么样的方式来结束自己,一般有两种状态:
(1)非分离状态:创建的默认属性就是非分离状态,在这种状态下,原有线程等待创建线程结束,只有原有进程调用pthread_join()函数时,被创建的进程才能释放自己占有的系统资源。
(2)分离状态:在这种状态下创建的线程没有被其它线程所等待,自己运行结束了,线程就终止并且马上释放掉所占有的资源。下面我们就来看看相关函数:
假设我们创建一个detach线程:
创建 detach 线程: pthread_t tid; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&tid, &attr, THREAD_FUNCTION, arg);
2.线程的栈地址和栈大小
这个主题已经在我的博客http://blog.csdn.net/caoyan_12727/article/details/52281409讨论过,这里不再赘述!!!下面只列出一些相关函数:
3.线程调度策略:
头文件: #include <pthread.h> 函数原形: int pthread_attr_getschedpolicy(const pthread_attr_t *attr,int *policy); int pthread_attr_setschedpolicy(pthread_attr_t *attr,int policy); 参数: attr 线程属性变量 policy 调度策略 返回值: 若成功返回0,若失败返回-1。说明:这两个函数具有两个参数,第1个参数是指向属性对象的指针,第2个参数是调度策略或指向调度策略的指针。调度策略可能的值是先进先出(SCHED_FIFO)、轮转法(SCHED_RR),或其它(SCHED_OTHER)。SCHED_FIFO策略允许一个线程运行直到有更高优先级的线程准备好,或者直到它自愿阻塞自己。在SCHED_FIFO调度策略下,当有一个线程准备好时,除非有平等或更高优先级的线程已经在运行,否则它会很快开始执行。SCHED_RR(轮循)策略是基本相同的,不同之处在于:如果有一个SCHED_RR策略的线程执行了超过一个固定的时期(时间片间隔)没有阻塞,而另外的SCHED_RR或SCHBD_FIPO策略的相同优先级的线程准备好时,运行的线程将被抢占以便准备好的线程可以执行。当有SCHED_FIFO或SCHED_RR策赂的线程在一个条件变量上等待或等待加锁同一个互斥量时,它们将以优先级顺序被唤醒。即,如果一个低优先级的SCHED_FIFO线程和一个高优先织的SCHED_FIFO线程都在等待相同的互斥锁,则当互斥量被解锁时,高优先级线程将总是首先被解除阻塞。
4.线程栈末尾缓冲区大小:
名称:: | pthread_attr_getguardsize pthread_attr_setguardsize |
功能: | 获得/修改线程栈末尾的警戒缓冲区大小 |
头文件: | #include |
函数原形: | int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,size_t *restrict guardsize); int pthread_attr_setguardsize(pthread_attr_t *attr ,size_t *guardsize); |
参数: | attr线程属性, guardsize警戒缓冲区的大小 |
返回值: | 若成功返回0,若失败返回-1。 |
相关文章推荐
- Linux的压缩打包方式之常见文件格式的压缩、解压小结
- Linux下常见文件格式的压缩、解压小结
- linux下线程优先级(属性) (当前线程的调度策略(是否允许设置优先级)。允许的最大优先级,最小优先级。如何设定优先级)
- 问题小结:Linux下oracle常见安装错误总结
- Linux 多线程编程( POSIX )( 二 )----->pthread_attr_t 线程属性
- Linux下常见文件格式的压缩、解压小结
- linux线程属性的设置(转)
- Linux下常见文件格式的压缩、解压小结
- Linux下常见文件格式的压缩、解压小结
- Linux 线程属性
- Linux下的多线程编程(例子、线程属性修改)
- linux 线程学习(二)属性设置
- Linux下常见文件格式的压缩、解压小结
- linux多线程学习(三)——线程属性设置
- linux文件属性小结
- Linux下常见文件格式的压缩、解压小结
- Linux下常见文件格式的压缩、解压小结
- LINUX下编程工具常见用法小结
- 【转】Linux--Linux线程创建与线程属性
- Linux下常见文件格式的压缩、解压小结