操作原语的比较

进程 线程
创建新的控制流 fork pthread_create
退出当前控制流 exit pthread_exit
异常退出当前控制流 abort pthread_cancel
得到某个控制流的退出状态 waitpid pthread_join
获得当前控制流的ID getpid pthread_self

拥有的资源对比

线程独有的资源,线程共享的资源(进程的资源)如下:
线程-第 3 页.png

linux中线程的实现

linux中的线程的实现主要是 NPTL 库(Native Posix Thread Library),它提供了线程的一系列的操作 pthread_
linux中的线程实际上是“轻量级”的进程。在内核看来,线程和进程没有区别,都是 task_struct
image.png

线程是“轻量级”的进程,“轻量级”体现在哪里?
体现在同属一个进程的各个线程,他们的 task_struct 的某些字段指向相同的结构体,如图所示:
image.png
pthread 的实现离不开 clone 这个系统调用。实际上, fork 也会调用 clone
clone 支持 clone_flags 这个参数,通过这个参数可以实现在线程之间共享一些进程资源:

  1. int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL | ...);

本文资源

线程.drawio