多线程

线程的概念:
线程是什么?: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)
线程分离适用场景:对线程的返回值不关心
线程分离可以在任意线程中实现

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值