《软件技术基础》之《同步》
《软件技术基础》之《同步》
进程并发控制:互斥与同步
并发控制
示例:
进程间的制约关系:
- 间接制约:资源共享→互斥
- 直接制约:进程合作→同步
临界资源:必须互斥使用的资源称为临界资源。
临界区:访问临界资源的那段代码称为临界区。
竞争临界资源引起的问题:忙等、饥饿、死锁。
临界区使用原则(互斥条件):空闲让进、忙则等待、优先等待、让全等待。
互斥与同步的解决策略
软件方法
在进入区设置和检查一些标志来标明是否有进程在临界区。若已经有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
初步设想——轮换使用临界区
第一次改进——设置临界区状态标志
第二次改进——预先表明进入临界区的态度
第三次改进——预先表明进入临界区的态度+谦让
谦让的改进:给定序号避免过分谦让
Peterson互斥算法
软件方法的特点
信号量方法
信号量实现进程互斥的基本原理
信号量定义
信号量的两个原子操作:wait(s)和signal(s),有时也称作P(s)和V(s)。
信号量的物理意义
wait、signal的应用
利用信号量实现互斥的通用模式
利用信号量实现前趋关系示例
P1、P2、P3、P4、P5、P6为一组合作进程,其进程前趋图如下所示,用P、V操作实现这六个进程的同步。
信号量的类型
依据使用方式:
管程
管程的组成
管程的概念
一个管程定义了一个数据结构和(在该数据结构上)能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。
管程的特点
若由于某种原因,一个正在管程中执行的进程必须阻塞,该如何处理?
答:释放管程供其他进程使用→同步机制。
管程中的同步机制
管程的结构
生产者-消费者问题
生产者-消费者模型
- 缓冲区:固定大小
- 生产者:满则等待,空则填充
- 消费者:空则等待,有则获取
限制要求:
流程图:
代码:
生产者-消费者问题的管程解决方法:
消息传递
进程通信:进程之间的信息交换。
进程通信方式:
进程通信的方式
共享存储区方式
电子邮件的发送与接收过程:
消息传递机制
数据交换以格式化的消息为单位。
消息的一般格式:
消息传递的同步:
三种同步方式:
消息传递的寻址:
邮箱:不限制进程数,允许多个发送进程向邮箱发送消息,同时,也允许多个接收进程从邮箱接收信息。
利用消息传递实现互斥
代码: