一、线程库
在 Linux 中,内核并没有明确的线程概念,只有轻量级进程的概念。因此操作系统没有提供直接的线程系统调用,仅提供轻量级进程的系统调用。
为了降低学习成本并提供线程接口,应用层对轻量级进程接口进行了封装,提供了 pthread 线程库。
pthread 线程库又叫原生线程库,几乎所有 Linux 平台默认自带。对于 g++ 来说属于第三方库,编译时需使用 -lpthread 选项。
二、线程创建 pthread_create
功能:创建一个新的线程
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
参数说明:
thread: 返回线程 ID(输出型参数)attr: 设置线程的属性,设为 NULL 表示使用默认属性(一般设为 NULL)start_routine: 函数地址,线程启动后要执行的函数arg: 传给线程启动函数的参数(可以通过类传多个)
返回值:成功返回 0;失败返回错误码。pthreads 函数出错时不会设置全局变量 errno,而是将错误代码通过返回值返回。pthreads 同样也提供了线程内的 errno 变量以支持其它使用 errno 的代码(局部存储)。建议通过返回值来判定错误,因为读取返回值比读取线程内 errno 变量的开销更小。
2.1 简单看看多线程


链接库时只需 -lpthread,因为该库已默认安装在系统路径下,编译器知道其位置,只是需要指定链接哪个库。
如果想查看所有的轻量级进程,可以用 ps -aL(a 是 all 的意思,L 是轻的意思)。
我们会发现主线程的 PID 和 LWP(CPU 调度的基本单位)是一样的,这应该也是用来让 CPU 区分切换的是主线程还是次线程的一个标识。
监视线程的方法:






















