线程

基本概念

  1. 轻量级进程,也有PCB。创建线程和进程的底层函数都是clone。
  2. 从内核看进程和线程是一样的,都有各自的PCB,但是PCB中指向内存资源的三级页表时相同的。
  3. 进程可以蜕变成线程。
  4. 线程 = 寄存器 和 栈
  5. linux下,线程时小的执行单位;进程时最小的分配资源单位。

线程间共享资源

  1. 文件描述符表
  2. 每种信号的处理方式
  3. 当前工作目录
  4. 用户ID和组ID
  5. 内存地址空间

  • text 代码段
  • data 数据段
  • bass 已初始化的全局变量,已初始化的静态变量
  • 堆 动态内存
  • 共享库 .so

线程间不共享

  1. 线程id
  2. 处理器现场及栈指针
  3. 独立的栈空间
  4. errno变量
  5. 信号屏蔽字
  6. 调度优先级

优缺点

优点:
- 提高程序的并发性
- 开销小,不需要重新分配内存
- 通信和共享数据方便

缺点
- 线程不稳定(库函数实现)
- 调试困难(gdb支持不好)
- 线程无法使用unix经典事件,例如信号

线程原语

  1. pthread_create()
    创建线程
    线程号填写到tid
    返回函数调用

  2. pthread_self()
    主线程里pthread_create()返回值tid == 子线程里pthread_self()

任何一个线程调用exit,导致进程内所有线程结束。

  1. pthread_exit
    返回的指针必须是全局的,或者malloc分配的。不能是线程栈指针。

  2. pthread_join()
    等价于wait。
    线程终止后,终止状态一直保留到其它线程调用pthread_join获取它的状态为止。

  3. pthread_cancel
    在进程内某个线程可以取消另一个线程

  4. pthread_detach
    当设置为detach时,线程一旦终止就立即回收它所占用的所有资源,不保存终止状态。

线程终止方式

  1. 从线程的主函数return
  2. 一个线程调用pthread_cancel终止同一个进程中的另一个线程
  3. 线程调用pthread_exit终止自己。

线程属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值