Linux线程常见属性小结
来源:互联网 发布:win8.1 固态硬盘优化 编辑:程序博客网 时间:2024/05/29 09:38
我们知道现代操作系统一般都支持多线程,线程是操作系统调度的基本单位,进程是操作系统分派资源的基本单位,所以对线程属性的掌握也十分重要,首先让我们来看看pthread_attr_t这个结构体:
//线程属性结构如下: 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)非分离状态:创建的默认属性就是非分离状态,在这种状态下,原有线程等待创建线程结束,只有原有进程调用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);
这个主题已经在我的博客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。
线程属性guardsizei控制着线程栈末尾之后用以避免栈溢出的扩展内存的大小,这个属性默认值是有具体定义来实现的,但常用值是系统页大小。可以把guardsize线程属性设置为0,不允许属性的这种行为发生;在这种情况下,不会提供警戒缓冲区。同样,如果修改了线程属性stackaddr,系统会认为我们自己管理堆栈,进而使栈警戒缓冲区机制无效,这等同于吧guardsize线程属性设置为0;
- Linux线程常见属性小结
- linux 线程 线程属性
- linux线程相关小结
- Linux常见命令小结1
- Linux常见命令小结2
- linux线程属性、共享属性
- linux 线程编程:线程属性
- Linux线程属性总结
- Linux线程属性总结
- Linux 线程设置属性
- linux线程属性
- Linux线程属性总结
- linux线程属性
- Linux线程属性总结
- Linux线程属性总结
- Linux线程属性
- Linux线程属性
- linux线程的属性
- ZooKeeper 会话超时
- myeclipse反编译
- cargo远程部署项目到tomcat
- 【java基础 3】树形结构数据呈现的递归算法实现
- React Native-组件的引用
- Linux线程常见属性小结
- 浅谈C中的malloc和free释放
- banner渐隐渐现
- HDU 1247 Hat’s Words
- 从头开始学SQL 入门(一)使用
- Java堆栈信息分析
- 零配置命令行HTTP服务器 http-server
- kingshard 分表-主从复制 mariadb搭载
- Java中double类型保留两位小数