生产者和消费者进程对 counter 的交替执行会使其结果不唯 ●生产者和消费者进程的交替执行 会导致进程永远等待,造成系统 死锁
⚫生产者和消费者进程对counter 的交替执行会使其结果不唯一 ⚫生产者和消费者进程的交替执行 会导致进程永远等待,造成系统 死锁
前一节介绍的种种方法虽能保证互斥, 可正确解决临界区调度问题,但有明显 缺点。对不能进入临界区的进程,采用 忙式等待( busy waiting)测试法,浪费 CPU时间。将测试能否进入临界区的责 任推给各个竞争的进程会削弱系统的可 靠性,加重了用户编程负担。 1965年荷兰的计算机科学家 EWDijkstra提出了新的同步工具-信 号量和P、V操作
⚫前一节介绍的种种方法虽能保证互斥, 可正确解决临界区调度问题,但有明显 缺点。对不能进入临界区的进程,采用 忙式等待(busy waiting)测试法,浪费 CPU时间。将测试能否进入临界区的责 任推给各个竞争的进程会削弱系统的可 靠性,加重了用户编程负担。 ⚫ 1965年荷兰的计算机科学家 E.W.Dijkstra提出了新的同步工具--信 号量和P、V操作
记录型傖号量与P操作 ●信号量:一种软资源 ●原语:执行时不可被中断的过程 ●P操作原语和V操作原语
记录型信号量与PV操作 ⚫信号量:一种软资源 ⚫原语:执行时不可被中断的过程 ⚫ P操作原语和V操作原语
●信号量按其用途可分为两种: ●公用信号量:联系一组并发进程,相关的进 程均可在此信号量上执行P和Ⅴ操作。初值常常为1, 用于实现进程互斥。 私有信号量:联系一组并发进程,仅允许此 信号量拥有的进程执行P操作,而其他相关进程可 在其上施行V操作。初值常常为0或正整数,多用 于并发进程同步。 信号量按其取值可分为两种: 元信号量:仅允许取值为0和1,主要用于 解决进程互斥问题。 般信号量:允许取值为非负整数,主要用 于解决进程间的同步问题
⚫ 信号量按其用途可分为两种: ⚫ ⚫ 公用信号量:联系一组并发进程,相关的进 程均可在此信号量上执行P和V操作。初值常常为1, 用于实现进程互斥。 ⚫ ⚫ 私有信号量:联系一组并发进程,仅允许此 信号量拥有的进程执行P操作,而其他相关进程可 在其上施行V操作。初值常常为0或正整数,多用 于并发进程同步。 ⚫ 信号量按其取值可分为两种: ⚫ ⚫ 二元信号量:仅允许取值为0和1,主要用于 解决进程互斥问题。 ⚫ ⚫ 一般信号量:允许取值为非负整数,主要用 于解决进程间的同步问题
1、整型信号量 。设s为一个正整形量,除初始化外,仅能通过P、V 操作来访问它,这时P操作原语和Ⅴ操作原语定义 如下:。 P(s);当信号量s大于0时,把信号量s减去 否则调用P(s)的进程等待直到信号量s大于0时。 ●●V(s):把信号量s加1 ●P(s)和Vs)可以写成: P(s): while s<0 do null operation S:=s-1; V(S):s:=+1
1、整型信号量 ⚫ 设s为一个正整形量,除初始化外,仅能通过P、V 操作来访问它,这时P操作原语和V操作原语定义 如下:。 ⚫ ⚫ P(s);当信号量s大于0时,把信号量s减去l, 否则调用P(s)的进程等待直到信号量s大于0时。 ⚫ ⚫ V(s):把信号量s加1。 ⚫ P(s) 和V(s) 可以写成: ⚫ P(s): while s≤0 do null operation ⚫ s:=s-1; ⚫ V(s): s:=s+1;