并发性:互斥和同步
5.1 并发的原理principles of concurrency
0. 一些术语
- 临界区:
critical section
一段代码,在这段代码中 进程将共享资源,当另外一个进程已在这段代码中运行时,这个进程就不可在这段代码中执行。同时只允许一个进程访问临界区
-
死锁:
deadlock
两个或以上的进程 因每个进程都在等待其他进程做完某事而不能继续执行。
竞争、协作导致的都不能向后执行,若无外力干预,则都面临饿死。 -
活锁
livelock
两个或两个以上的进程为响应其他进程中的变化而持续改变自己的状态但不做有用的工作情形
- 互斥:
mutual exclusion
当一个进程在临界区访问共享资源时,其他进程不能进入临界区访问共享资源的情形
- 竞争条件:
race condition
多个线程或进程在读写一个共享数据时,结果依赖于他们执行的相对时间情形
- 饥饿
starvation
一个可运行的进程尽管能继续执行,但被调度程序无限期的忽视,而不能被调度执行的情形。
1. 例子
echo 共享过程
- 全局共享资源危险
- 难以对资源做到全局优化分配
- 难以定位程序错误,错误的产生可能是由于代码出错,也可能是由于进程与其余进程 协作出错,资源分配出错
2. 竞争条件
race condition
竞争条件发生在多个进程 或 线程对共享数据进行读写操作,因此数据的最终值取决于 进程指令 对共享数据的操作顺序