进程:进程是资源管理的最小单位html
线程:线程是程序执行的最小单位编程
由于进程开销大,才衍生出线程缓存
一个进程至少须要一个线程做为它的指令执行体,进程管理着资源(好比cpu、内存、文件等等), 而将线程分配到某个cpu上执行多线程
新的执行线程将拥有本身的栈,但与它的建立者共享全局变量、文件描述符、信号处理函数和当前目录状态函数
特色:线程
使用 pthread_create 建立线程指针
使用 int pthread_attr_destroy(pthread_attr_t *attr); 函数来销毁一个线程属性对象code
使用 pthread_attr_init() 函数能够初始化线程对象的属性htm
使用 pthread_join() 等待线程结束对象
使用 pthread_detach() 来设置线程为分离状态
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
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;
API | 说明 |
---|---|
pthread_attr_init() | 初始化一个线程对象的属性 |
pthread_attr_destroy() | 销毁一个线程属性对象 |
pthread_attr_getaffinity_np() | 获取线程间的CPU亲缘性 |
pthread_attr_setaffinity_np() | 设置线程的CPU亲缘性 |
pthread_attr_getdetachstate() | 获取线程分离状态属性 |
pthread_attr_setdetachstate() | 修改线程分离状态属性 |
pthread_attr_getguardsize() | 获取线程的栈保护区大小 |
pthread_attr_setguardsize() | 设置线程的栈保护区大小 |
pthread_attr_getscope() | 获取线程的做用域 |
pthread_attr_setscope() | 设置线程的做用域 |
pthread_attr_getstack() | 获取线程的堆栈信息(栈地址和栈大小) |
pthread_attr_setstack() | 设置线程堆栈区 |
pthread_attr_getstacksize() | 获取线程堆栈大小 |
pthread_attr_setstacksize() | 设置线程堆栈大小 |
pthread_attr_getschedpolicy() | 获取线程的调度策略 |
pthread_attr_setschedpolicy() | 设置线程的调度策略 |
pthread_attr_setschedparam() | 获取线程的调度优先级 |
pthread_attr_getschedparam() | 设置线程的调度优先级 |
pthread_attr_getinheritsched() | 获取线程是否继承调度属性 |
pthread_attr_getinheritsched() | 设置线程是否继承调度属性 |
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
函数来销毁一个线程属性对象
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)
线程的分离状态决定一个线程以什么样的方式来终止本身
默认状态下是 非分离状态
函数:
int pthread_join(pthread_t tid, void **rval_ptr);
int pthread_detach(pthread_t tid);
#include <pthread.h>
在非分离状态下:
在分离状态下:
若是在建立线程时就知道不须要了解线程的终止状态,则能够 pthread_attr_t 结构中的 detachstate 线程属性,让线程以分离状态启动
pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)
函数来设置线程分离状态
获取某个线程的分离状态
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);
函数获取线程的分离状态注意:
POSIX 标准指定了三种调度策略:
与调度相关的API
int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched); int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched); int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
int sched_get_priority_max(int policy); int sched_get_priority_min(int policy);
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param); int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
void pthread_exit(void *retval);
函数* 野火