- 参考 Linux多线程编程
- 进程
- 是程序执行时的一个实例
- 担当分配系统资源(CPU时间、内存等)的基本单位
- 拥有独立的地址空间,所以就算崩了也不会对其他进程有影响
- 启动一个进程比启动一个线程要慢,因为需要给其分配独立的资源
- 同时进程间的切换比线程间的切换要慢,因为每个进程的地址空间是独立的,在切换时,需要切换页表,需要切换内核栈和硬件上下文
- 线程
- 可以看成是进程里的一个最小执行单位
- 一个进程里可以包含多个线程
- 同个进程内的线程共享进程的所有资源
- 所以一个线程崩了就会导致整个进程崩了
- 线程的切换虽然也是耗费资源的,但对比进程的切换,还是相对节约一点的
- 线程切换时不需要切换页表,因为共享了虚拟内存空间,但是需要切换内核栈和硬件上下文,这点跟进程切换是一样的
- 线程拥有自己的堆栈,这个是不会跟其他线程共享的
- 在linux下,多线程的实现主要是
pthread库 - 常用的api
-
创建线程
#include <pthread.h> int pthread_create ( pthread_t *__restrict __newthread, // 新创建的线程ID __const pthread_attr_t *__restrict __attr, // 线程属性 void *(*__start_routine) (void *), // 执行函数 void *__restrict __arg // 执行函数的参数 ) -
线程退出
- 退出线程可以通过隐式退出,即执行完线程函数
- 也可以通过显示调用
pthread_exit来退出 value_ptr是函数的返回代码,只要pthread_join中的第二个参数value_ptr不是NULL,这个值将被传递给value_ptr
void pthread_exit(void *value_ptr); -
线程等待
int pthread_join( pthread_t thread, void * * value_ptr );
-