Linux多线程与同步
典型的UNIX系统都支持一个进程创建多个线程(thread)。在 Linux进程基础 中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实现方式有异于其它的UNIX系统,但Linux的多线程在逻辑和使用上与真正的多线程并没有差别。 1. 多进程 我们先来看一下什么是多线程。在 Linux从程序到进程 中,我们看到了一个程序在内存中的表示。这个程序的整个运行过程中,只有 一个控制权 的存在。当函数被调用的时候,该函数获得控制权,成为 激活 (active)函数,然后运行该函数中的指令。与此同时,其它的函数处于离场状态,并不运行。如下图所示: Linux从程序到进程 我们看到,各个方块之间由箭头连接。各个函数就像是连在一根线上一样,计算机像一条流水线一样执行各个函数中定义的操作。这样的一个程序叫做 单线程 程序。 多线程就是允许一个进程内存在 多个控制权 ,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行。即使是单CPU的计算机,也可以通过 不停地在不同线程的指令间切换 ,从而造成多线程同时运行的效果。如下图所示,就是一个多线程的流程: main()到func3()再到main()构成一个线程,此外func1()和func2()构成另外两个线程。操作系统一般都有一些系统调用来让你将一个函数运行成为一个新的线程。 回忆我们在 Linux从程序到进程