C++多线程编程入门
2009 年 05 月 11 日 星期一 18:13
第 1 节 背景
为了更好的理解多线程的概念,先对进程,线程的概念背景做一下简单介绍。
早期的计算机系统都只允许一个程序独占系统资源,一次只能执行一个程序。在
大型机年代,计算能力是一种宝贵资源。对于资
源拥有方来说,最好的生财之道自然是将同一资源同时租售给尽可能多的用户。
最理想的情况是垄断全球计算市场。所以不难理
解为何当年 IBM 预测“全球只要有 4 台计算机就够了”。
这种背景下,一个计算机能够支持多个程序并发执行的需求变得十分迫切。由此
产生了进程的概念。进程在多数早期多任务操作
系统中是执行工作的基本单元。进程是包含程序指令和相关资源的集合。每个进
程和其他进程一起参与调度,竞争 CPU,内存等
系统资源。每次进程切换,都存在进程资源的保存和恢复动作,这称为上下文切
换。
进程的引入可以解决支持多用户的问题,但是多进程系统也在如下方面产生了新
的问题:
进程频繁切换引起的额外开销可能会严重影响系统性能。
进程间通信要求复杂的系统级实现。
在程序功能日趋复杂的情况下,上述缺陷也就凸现出来。比如,一个简单的 GUI
程序,为了有更好的交互性,通常用一个任务支
持界面交互,另一个任务支持后台运算。如果每个任务均由一个进程来实现,那
会相当低效。对每个进程来说,系统资源看上去
都是其独占的。比如内存空间,每个进程认为自己的内存空间是独有的。一次切
换,这些独立资源都需要切换。
由此就演化出了利用分配给同一个进程的资源,尽量实现多个任务的方法。这也
就引入了线程的概念。同一个进程内部的多个线
程,共享的是同一个进程的所有资源。
比如,与每个进程独有自己的内存空间不同,同属一个进程的多个线程共享该进
程的内存空间。例如在进程地址空间中有一个全
局变量 globalVar,若 A 线程将其赋值为 1,则另一线程 B 可以看到该变量值为