Linux入门学习16

线程: LWP: light weight process 轻量级的进程,本质仍是进程 ( Linux 环境下 )
进程与线程的区别
进程 : 有独立 PCB ,且有独立地址空间,
线程 : 有独立 PCB ,但没有独立的地址空间 ( 共享 )
区别 : 在于是否共享地址空间。
线程 : 最小的执行单位。
进程 : 最小分配资源单位(可看成是只有一个线程的进程)
linux下内核实现线程原理
1. 轻量级进程 (ight-weight process), 也有 PCB ,创建线程使用的底层函数和进程一样, 都是 clone
2. 从内核里看进程和线程是一样的, 都有各自不同的 PCB ,但是线程 PCB 中指向内存资源的三级页表是
相同的。
3. 进程可以蜕变成线程。
4. 线程可看做寄存器和栈的集合。
5. linux 下,线程最是小的执行单位 : 进程是最小的分配资源单位。
线程共享资源
1. 文件描述符表
2. 每种信号的处理方式
3. 当前工作目录
4. 用户 ID 和组 ID
5. 内存地址空间 (.text/.data/.bss/heap/ 共享库 ) 、共享全局变量
线程非共享资源
1. 线程 id (线程标识符)
2. 处理器现场和栈指针 ( 内核栈 )
3. 独立的栈空间 ( 用户空间栈 )
4.errno 变量
5. 信号屏蔽字
6. 调度优先级
线程优、缺点
优点 :
1. 提高程序并发性
2. 开销小
3. 数据通信、共享数据方便。
缺点 :
1. 属于库函数,不稳定
2. 调试、编写困难、 gdb 不支持
3. 对信号支持不好
pthread_t 线程标识符
函数:在使用gcc 生成文件时需要在最后加上——lpthread库函数
pthread_self()获取线程ID,没有入参,ID为无符号整数(%lu)
pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start routine) (void *), void *arg);创建新线程
参数1:传出参数,保存系统为我们分配好的新线程ID。
参数2:线程属性,通常传NULL,表示使用线程默认属性。若想使用具体属性也可以修改该参数。
参数3:回调子线程函数名
参数4:参3子线程函数需要的参数,没的话传NULL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简欧k

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值