什么是线程?

线程是进程内部的执行流。

  • 一个进程中的多个线程共享地址空间与其中的部分内存资源(代码段,数据段,堆),但每个线程都有自己独立的栈空间,私有寄存器与线程控制块 (Thread Control Block, TCB)

OS 以线程作为 CPU 调度与执行的最小单位

  • 什么?不是进程吗?
  • sorry,我不想那么早介绍一堆概念。之前的章节所涉及到的进程均为单线程进程 (single-threaded process),所以在 CPU 的调度与执行上与线程等价。
那么进程抽象的意义何在?

OS 以进程作为资源分配的最小单位;进程拥有自己独立的地址空间,资源开销大,稳定性高。

多线程

多线程 (multithreading) 就是在同一进程里同时运行多个线程。

  • 并行任务能在代码中更自然的表达
  • 线程切换比进程切换更为轻量
  • 避免进程阻塞(跑 I/O 的线程阻塞,CPU 切换至同进程中的其他线程继续运行)

多线程本质上是一个进程内部的多道程序设计 (multiprogramming)

POSIX 线程 API

  • pthread_create(pthread_t*, pthread_attr_t*, void*, void*):指定函数与参数
  • pthread_exit(void *retval)
  • pthread_join(pthread_t, void**)

同步原语。敬请期待!

  • pthread_mutex_lock(pthread_mutex_t*), pthread_mutex_unlock(pthread_mutex_t*)
  • pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*), pthread_cond_signal(pthread_cond_t*)

多线程的程序在编译时需要添加 -pthread flag。