《软件技术基础》之《同步》

进程并发控制:互斥与同步

《软件技术基础》之《同步》

并发控制

示例:
《软件技术基础》之《同步》
进程间的制约关系

  • 间接制约:资源共享→互斥
  • 直接制约:进程合作→同步

临界资源:必须互斥使用的资源称为临界资源。

临界区:访问临界资源的那段代码称为临界区。
《软件技术基础》之《同步》

竞争临界资源引起的问题:忙等、饥饿、死锁。
《软件技术基础》之《同步》
临界区使用原则(互斥条件):空闲让进、忙则等待、优先等待、让全等待。
《软件技术基础》之《同步》

互斥与同步的解决策略

《软件技术基础》之《同步》
《软件技术基础》之《同步》

软件方法

在进入区设置和检查一些标志来标明是否有进程在临界区。若已经有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

初步设想——轮换使用临界区
《软件技术基础》之《同步》

第一次改进——设置临界区状态标志
《软件技术基础》之《同步》
《软件技术基础》之《同步》
第二次改进——预先表明进入临界区的态度
《软件技术基础》之《同步》
《软件技术基础》之《同步》
第三次改进——预先表明进入临界区的态度+谦让
《软件技术基础》之《同步》
《软件技术基础》之《同步》
谦让的改进:给定序号避免过分谦让
《软件技术基础》之《同步》
《软件技术基础》之《同步》

Peterson互斥算法

《软件技术基础》之《同步》

软件方法的特点

《软件技术基础》之《同步》

信号量方法

信号量实现进程互斥的基本原理

《软件技术基础》之《同步》

信号量定义

《软件技术基础》之《同步》
信号量的两个原子操作:wait(s)和signal(s),有时也称作P(s)和V(s)。
《软件技术基础》之《同步》

信号量的物理意义

《软件技术基础》之《同步》

wait、signal的应用

《软件技术基础》之《同步》

利用信号量实现互斥的通用模式

《软件技术基础》之《同步》

利用信号量实现前趋关系示例

P1、P2、P3、P4、P5、P6为一组合作进程,其进程前趋图如下所示,用P、V操作实现这六个进程的同步。
《软件技术基础》之《同步》
《软件技术基础》之《同步》

信号量的类型

依据使用方式:
《软件技术基础》之《同步》
《软件技术基础》之《同步》

管程

管程的组成

《软件技术基础》之《同步》

管程的概念

一个管程定义了一个数据结构和(在该数据结构上)能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。

管程的特点

《软件技术基础》之《同步》

若由于某种原因,一个正在管程中执行的进程必须阻塞,该如何处理?
答:释放管程供其他进程使用→同步机制。

管程中的同步机制

《软件技术基础》之《同步》

管程的结构

《软件技术基础》之《同步》

生产者-消费者问题

《软件技术基础》之《同步》
《软件技术基础》之《同步》
生产者-消费者模型

  • 缓冲区:固定大小
  • 生产者:满则等待,空则填充
  • 消费者:空则等待,有则获取

《软件技术基础》之《同步》
《软件技术基础》之《同步》
限制要求:
《软件技术基础》之《同步》
流程图:
《软件技术基础》之《同步》
代码:
《软件技术基础》之《同步》
生产者-消费者问题的管程解决方法:
《软件技术基础》之《同步》

消息传递

进程通信:进程之间的信息交换。

进程通信方式
《软件技术基础》之《同步》

进程通信的方式

《软件技术基础》之《同步》

共享存储区方式

《软件技术基础》之《同步》

电子邮件的发送与接收过程:
《软件技术基础》之《同步》

消息传递机制

数据交换以格式化的消息为单位。

消息的一般格式:
《软件技术基础》之《同步》
消息传递的同步:
《软件技术基础》之《同步》
三种同步方式:
《软件技术基础》之《同步》
《软件技术基础》之《同步》
消息传递的寻址:
《软件技术基础》之《同步》
《软件技术基础》之《同步》

邮箱:不限制进程数,允许多个发送进程向邮箱发送消息,同时,也允许多个接收进程从邮箱接收信息。
《软件技术基础》之《同步》

利用消息传递实现互斥

《软件技术基础》之《同步》
代码:
《软件技术基础》之《同步》