【Linux编程】之多线程Pthread
-------------------------常用函数-----------------------------
1.pthread_self 获取线程号
2.pthread_equal 判断线程号是否一致
3.pthread_create 创建线程
3.pthread_join 回收线程
4.pthread_detach 线程分离
5.pthread_exit 线程退出
----------------------线程属性----------------------
typedef struct pthread_attr_t 线程结构体
1.pthread_attr_init 初始化线程结构体
2.pthread_attr_setscope 设置线程竞争范围
3.pthread_attr_setdetachstate 设置分离属性
---------------------线程优先级策略----------------------
Linux内核的三种调度策略:
1.pthread_attr_setschedpolicy 修改线程策略
2.pthread_attr_setschedparam 设置优先级
3.pthread_attr_getschedparam 得到线程优先级
简介:
1) 线程是轻量级进程(light-weight process),也有PCB,创建线程使用的底层函数和进程一样,都是clone
2) 从内核里看进程和线程是一样的,都有各自不同的PCB.
3) 进程可以蜕变成线程
4) 在linux下,线程最是小的执行单位;进程是最小的分配资源单位
注意
进程:如果复制对方的地址空间,那么就产出一个“进程;
写时拷贝,读时共享
线程:如果共享对方的地址空间,就产生一个“线程”。
共享的资源
1) 文件描述符表
2) 每种信号的处理方式
3) 当前工作目录
4) 用户ID和组ID
非共享资源
1) 线程id
2) 处理器现场和栈指针(内核栈)
3) 独立的栈空间(用户空间栈)
4) errno变量
5) 信号屏蔽字
6) 调度优先级
常用函数使用方法
1.pthread_self 获取线程号
头文件:
#include <pthread.h>
pthread_t pthread_self(void);
获取一个线程号(tid)
该函数永远成功,并返回一个线程号
2.pthread_equal 判断线程号是否一致
头文件:
#include <pthread.h>
int pthread_equal(pthread_t t1, pthread_t t2);
判断线程号 t1 和 t2 是否相等。
线程1的tid,线程2的tid
相同返回非0,不同返回0
3.pthread_create 创建线程
头文件:
#include <pthread.h>
函数:
int pthread_create(pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg );
创建一个工作线程,并指定其工作的回调函数以及传入参数
pthread_t: 线程tid,即线程号
pthread_attr_t:线程设置参数的结构体,不关心设置为NULL即可,详细设置请看后面