Linux线程理论
一、线程概念
轻量级的进程,在Linux环境下,其本质仍是进程。
特点:拥有独立的PCB进程控制块,多个线程贡享虚拟地址空间。
线程共享资源:1、文件描述符 2、信号处理方式 3、当前工作目录 4、用户ID和组ID 5、内存地址空间
线程非共享资源:1、线程ID 2、处理器现场和栈指针(内核栈) 3、独立的栈空间(用户空间栈) 4、error变量 5、信号屏蔽字 6、调度优先级
线程优缺点:
优点:1、提高程序并发性 2、开销小 3、数据通信、共享数据方便(可以直接使用全局变量)
缺点:1、库函数,不稳定 2、调试、编写困难,gdb不支持 3、对信号支持不好
二、线程控制原语
/*获取线程ID*/
pthread_t pthread_self(void); /*pthread_t在linux下可理解为unsigned long int类型*/
/*创建线程*/
int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
参数1:传出参数,保存系统分配的线程ID;
参数2:线程默认属性,是一个传入结构体类型的指针。
typedef struct
{
int etachstate; //线程的分离状态
int schedpolicy; //线程调度策略
struct sched_param schedparam; //线程的调度参数
int inheritsched; //线程的继承性
int scope; //线程的作用域
size_t guardsize; //线程栈末尾的警戒缓冲区大小
int stackaddr_set; //线程的栈设置
void* stackaddr; //线程栈的位置
size_t stacksize; //线程栈的大小
}pthread_attr_t;
/*退出单个线程*/
void pthread_exit(void *retval); /*retval传出参数,获取线程退出状态*/
/*阻塞等待线程退出,并且获取线程退出状态*/
int pthread_join(pthread_t thread,void **retval); /*传出参数,获取pthread_exit函数的传出参数*/
/*实现线程分离状态*/
int pthread_detach(pthread_t thread); /*线程结束后会自动回收它所占用的资源*/
/*杀死线程*/
int pthread_cancel(pthread_t thread); /*需要等待线程到达某个检查点,可粗略认为一个系统调用
假如没有取消点,可通过调用pthread_testcancel函数设置*/
/*比较两个线程是否相等*/
int pthread_equal(pthread_t t1,pthread_t t2);

浙公网安备 33010602011771号