1. 线程分离
1. 为什么要线程分离?
使用 pthread_join 默认是阻塞的 ,即主线程等待 新线程退出
在这个过程中,主线程会直接卡住,就没办法继续向后运行,也就什么都干不了
若主线程 想做其他事情 ,所以就提出了线程分离的概念
默认情况下,新创建的线程是joinable的
即 线程默认被创建出来时,必须被join的, 若不能被join,线程对应的资源就无法释放,进而造成内存泄漏问题
若不关心线程的返回值,join是一种负担,创建一个线程时,提前告诉它,要分离这个线程
2. 具体使用
2. 如何理解线程库?
自己形成的可执行程序,要跟库文件关联起来
库要加载到内存中,经过页表映射到地址空间的共享区中
进程中的多线程,可以随时访问库中的代码和数据
每个线程也都可以访问映射过来的pthread库
线程库也需要管理线程,先描述再组织
线程库创建类似的管理线程的TCB
如何理解 先描述 在组织?
描述:
struct pthread 描述的是线程的其他的一些属性
线程局部存储 (后面会详细讲)
线程独立的栈
整体红色的框 作为一个结构体 等同于 线程的TCB 结构 进行描述
创建一个线程就有一个红色框
组织:
整体红色的框 作为一个结构体
把 每个结构体想象成数组, 可以聚合在一起
找线程,找红色框的起始地址即可 称为 线程ID
pthread_t 就是一个地址数据,用来标识线程相关属性集合、
这个地址是虚拟地址