CPU 像一座工厂, 时刻在运行.
单个 CPU 一次只能运行一个任务. 工厂的电力有限, 一次只能供给一个车间使用.
线程就好比车间里的工人. 一个进程可以包括多个线程.
许多房间是每个工人都可以进出的. 这象征一个进程的内存空间是共享的, 每个线程都可以使用这些共享内存.
有些房间最多只能容纳一个人, 比如厕所. 里面有人的时候, 其他人就不能进去了. 这代表一个线程使用某些共享内存时, 其他线程必须等它结束, 才能使用这一块内存.
防止他人进入的简单方法, 就是门口加一把锁. 先到的人锁上门, 后到的人看到上锁, 就在门口排队, 等锁打开再进去. 这就叫 "互斥锁"(Mutual exclusion, 缩写 Mutex), 防止多个线程同时读写某一块内存区域.
有些房间, 可以同时容纳 n 个人, 比如厨房. 也就是说, 如果人数大于 n, 多出来的人只能在外面等着. 这好比某些内存区域, 只能供给固定数目的线程使用.
解决方法, 就是在门口挂 n 把钥匙. 进去的人就取一把钥匙, 出来时再把钥匙挂回原处. 后到的人发现钥匙架空了, 就知道必须在门口排队等着了. 这种做法叫做 "信号量"(Semaphore), 用来保证多个线程不会互相冲突.
进程与线程
来源: http://www.bubuko.com/infodetail-2877970.html