17.8 pthreads 入门
POSIX 线程 (pthreads) 是一种描述多线程程序执行的模型的标准。该标准提供了并行执行代码和控制执行的手段。该标准的实现是 pthreads 库,这一整章都会使用这个库。
该库包含 C 类型,常量和一些过程函数(一般有 pthread_
的前缀)。其声明都可以在 pthread.h 文件中找到。其中提供的函数可划分为下面的几种:
- 基本线程管理(创建、销毁)。
- 互斥量管理。
- 条件变量。
- 使用锁和屏障进行同步。
本节先研究几个例子,让我们能对 pthreads 能变得稍微熟悉一些。为了能够完成多线程计算,你有下面两个选项:
- 在同一个进程内创建多个线程。这些线程共享相同的地址空间,所以数据交换起来很简单且很快速。当进程销毁后,所有的线程跟着被销毁。
- 创建多个进程,每一个进程都有自己的默认线程。这些线程通过操作系统提供的手段来通信(例如 pipe)。 这种情况就没有那么快了,创建进程要比创建线程慢很多,因为创建进程需要创建很多操作系统相关的数据结构(以及一个完全分离的地址空间)。进程间通信经常需要一次或多次(有时是隐式)拷贝操作。 不过,将程序的逻辑划分到不同的进程中会带来安全和稳定方面的优势,因为每一个线程就只能看到自己所在的进程暴露给他们的一部分数据了。
Pthreads 允许你在单进程内创建多个线程,大部分情况下你的需求也就是这样的。