7. 线程基础

7.1 什么是线程

线程是一个轻量的进程,是一个任务创建、调度、消亡的过程。线程是操作系统任务调度的最小单元。

7.2 进程和线程的区别

  • 进程是操作系统资源分配的最小单元,进程独占 0-4G 虚拟内存空间,可以划分为文本段、数据段、系统数据段,每个进程独享以上区域
  • 线程位于进程空间内部,线程只有独立的栈空间,其余的堆区、数据区、文本区与进程内其余线程共享
  • 线程是操作系统任务调度的最小单元

7.3 线程创建

每个线程拥有属于自己的栈空间(默认为 8M),其余空间与进程内其余线程共享。局部变量独享,全局变量、静态变量、字符串常量、堆区都是共享的。

7.4 线程调度与消亡

线程调度与进程调度保持一致,宏观并行,微观串行。线程结束必须回收线程空间,否则会产生僵尸线程。

7.5 进程与线程接口对比

操作 进程 线程
创建 fork pthread_create
退出 exit pthread_exit
回收 wait pthread_join

7.6 线程函数接口

7.6.1 pthread_create
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);

功能:在进程中创建一个线程。

参数说明:

  • thread:存放线程 ID 空间的首地址
  • attr:线程的属性(栈空间大小、优先级、分离/加入属性),默认属性传 NULL
  • start_routine:函数指针,指向线程要执行的函数
  • arg:对线程函数的传参

返回值:成功返回 0,失败返回错误码。

7.6.2 pthread_exit
void pthread_exit(void *retval);

功能:退出当前线程。

参数说明:

  • retval:线程退出时返回给回收者的值
7.6.3 pthread_join
int pthread_join(pthread_t thread, void **retval);

功能:回收指定线程的空间,具有阻塞功能。

参数说明:

  • thread:要回收的线程 ID
  • retval:存放线程退出状态空间的首地址

返回值:成功返回 0,失败返回错误码。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐