文章目录
进程同步与互斥
简介
多线程并发会导致资源竞争。
同步即协调多线程对共享数据的访问,保证任何时刻都只能有一个线程执行临界区代码。
互斥是解决进程同步的方式。
进程间合作
独立进程是指一个进程在运行过程中不会与其他进程进行交互的进程。
但是,进程在运行的过程中不可避免的要进行进程间合作。
进程合作的优势:
- 共享资源
- 一台电脑,多个用户
- 一个银行存储余额,多台ATM机
- 嵌入式系统(机器人控制:手臂和手的协调)
- 加速
- I / O操作和计算可重叠
- 多处理机——将程序分成多个部分执行
- 模块快
- 将大程序分解成小程序
- 如编译系统。
- 视系统易于扩展
- 将大程序分解成小程序
进程间合作的问题
进程间合作要避免不确定性和不可重现性。由于进程调度的不确定性,因此进程的一个操作可能被打断。
进程间通信要解决三个问题:
- 一个进程如何将信息传递给另一个进程
- 确保多个进程在关键活动中不会交叉,即进程互斥问题。
- 保证正确的访问顺序,即进程同步问题。
竞争条件
竞争条件是说多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序。
案例:
- 通过调用函数fork来创建一个进程。
- new_pid = next_pid++;
- 这一条语句翻译成汇编代码会是四句,因此要把他们当成一个原子操作去执行。
- 两个程序并发执行访问并更改一个变量x。
原子操作
原子操作是指一次不存在任何中断或者失败的执行。
- 该执行成功结束
- 或者根本没有执行
- 并且不应该出现任何部分执行的状态
但是实际上操作往往不是原子的
- 有些看上去是原子操作,但是实际上不是,如x++,实际上此条语句由三条汇编语言组成。
- 有时甚至连单条机器指令都不是原子的,如Pipiline、super-scalar、out-of-order、page fault等。
操作系统需要利用同步机制在进程并发执行的同时保证一些操作是原子操作。