Linux——线程

tech2025-09-19  44

文章目录

线程概念一、线程资源?线程共享资源线程非共享资源 二、优缺点1.优点2.缺点 三、线程控制原语线程属性pthread_exit、return、exit的区别


线程概念

线程又称为轻量级进程,本质仍是进程(在linux环境下)

进程:独立地址空间,拥有PCB 线程:也有PCB,但是没有独立的地址空间,是共享进程地址空间

在Linux下:   线程:是最小的执行单位   进程:是小的分配资源单位


一、线程资源?

线程共享资源

文件描述符表每种信号的处理方式当前工作目录用户ID和组ID内存地址空间(.text/.data/.bss/heap/共享库)不共享栈

线程非共享资源

线程id处理器现场和栈值针(内核栈)独立的栈空间(用户空间栈)error变量信号屏蔽字调度优先级

线程间共享全局变量

二、优缺点

1.优点

提高程序并发性开销小数据通信、共享数据方便

2.缺点

是第三方库函数,不稳定调试、编写困难、gdb不支持对信号支持不好

三、线程控制原语

pthread_self函数      获取线程ID

pthread_t pthread_self(void);

返回值   成功:0   失败:无 线程ID:pthread_t类型,本质:在Linux下为无符号整数(%lu),其他系统中可能是结构体实现 线程ID:是进程内部,识别标志。(两进程间,线程ID允许相同)


pthread_creat函数      创建一个新线程

int pthread_create (pthread_t * tidp, const pthread_attr_t * attr, void * (*start_rtn)(void*), void *arg);

返回值   成功:0   失败:错误号

参数   参数1:返回的线程ID   参数2:设置线程属性,通常为NULL   参数3:线程要运行的函数   参数4:运行函数的参数


pthread_exit函数     将调用该函数的单线程退出

void pthread_exit(void *retval)

参数   参数1:线程结束时的返回值


pthread_join函数     阻塞等待线程退出,获取线程退出状态

void pthread_join(pthread_t th,void **thread_return)

参数   参数1:线程ID   参数2:储存线程结束状态

返回值   成功:0   失败:错误号


pthread_detach函数     实现线程分离

int pthread_detach(pthread_t th)

参数   参数1:线程ID

返回值   成功:0   失败:错误号

注意:pthread_detach和pthread_join两个函数不能同时使用 在实现线程分离时,还可以采用配置线程的属性来实现线程的分离


pthread_cancel函数     取消线程

int pthread_cancel(pthread_t th)

参数   参数1:线程ID

返回值   成功:0   失败:错误号

线程属性

在 pthread_create 函数的第二个参数——线程的属性。将该值设为 NULL,也就是采用默认属性,线程的多项属性都是可以更改的。这些属性主要包括绑定属性、分离属性、堆栈地址、堆栈大小、优先级。其中系统默认的属性为非绑定、非分离、缺省1M 的堆栈、与父进程同样级别的优先级。

对属性初始化: 设置绑定属性: 设置线程分离属性: 设置线程优先级: 获取线程优先级:

pthread_exit、return、exit的区别

pthread_exit:仅将调用该函数的单线程退出 return:返回到调用者那里 exit:退出该进程

最新回复(0)