线程的概念:
线程是什么?:1.pcb是进程;2.linux下线程通过pcb实现,pcb是一个轻量级进程;同一个进程组中的pcb共用同一个虚拟地址空间,共享进程组中大部分资源;
线程之间的独有与共享:
独有:栈,寄存器,信号屏蔽字,errno,线程ID
共享:虚拟地址空间(数据段/代码段),文件描述符表,信号处理方式,当前工作路径,用户id/组id进程是资源分配的基本单位
线程是cpu调度的基本单位
多线程与多进程任务处理的优缺点分析:
共享虚拟地址空间:线程间通信更加方便/创建销毁成本更低/调度成本更低
缺乏访问控制,一些系统调用以及异常都会对整个进程造成影响
线程控制:
线程控制的接口都是库函数实现的:创建一个用户态线程让用户控制,但是程序的调度处理都是通过轻量级进程pcb实现的
线程创建:pthread_create
线程id:
tid-线程地址空间首地址-方便用户操作线程
pcb->pid 轻量级进程ID–LWP
pcb->tgid 线程组ID-进程ID==首线程的pid
线程终止:
return pthread_exit(void*retval) pthread_cancel(pthread_t tid)
线程等待:等待指定线程退出,获取这个线程退出的返回值,并且回收这个线程的资源;
一个线程有一个默认属性:joinable;处于joinable属性的线程退出后为了保存返回值,因此不会自动释放资源;如果不进行等待则会造成资源泄漏
一个线程也只有处于joinable状态的时候,才需要被等待
线程分离:
线程分离就是将线程joinable属性修改为detach属性
线程若处于detach属性,则线程退出后将自动回收资源;
并且这个线程不需要被等待,等待是毫无意义的,因为线程退出返回值占用的空间已经被回收了
pthread_detch (pthread_t tid)
线程分离适用场景:对线程的返回值不关心
线程分离可以在任意线程中实现
多线程
最新推荐文章于 2024-03-27 14:44:09 发布