进程互斥与同步互斥.ppt
实验、进程的同步与互斥——生产者消费者
实验、进程的同步与互斥——⽣产者消费者1. 1. 实验⽬的两个或两个以上的进程,不能同时进⼊关于同⼀组共享变量的临界区域,否则可能发⽣与时间有关的错误,这种现象被称作进程互斥。
对CPU的速度和数⽬不做出任何假设的前提下,并发进程互斥访问临界资源,是⼀个较好的解决⽅案。
另外,还需要解决异步环境下的进程同步问题。
所谓异步环境是指:相互合作的⼀组并发进程,其中每⼀个进程都以各⾃独⽴的、不可预知的速度向前推进;但它们⼜需要密切合作,以实现⼀个共同的任务,即彼此“知道”相互的存在和作⽤。
实验⽬的:分析进程争⽤资源的现象,学习解决进程同步与互斥的⽅法。
本实验属于设计型实验,实验者可根据⾃⾝情况选⽤合适的开发环境和程序架构。
1. 2. 实验原理信号量的PV操作与处理相关,P表⽰通过的意思,V表⽰释放的意思。
1962年,狄克斯特拉离开数学中⼼进⼊位于荷兰南部的艾恩德霍芬技术⼤学(Eindhoven Technical University)任数学教授。
在这⾥,他参加了X8计算机的开发,设计与实现了具有多道程序运⾏能⼒的操作系统——THE Multiprogramming System。
THE是艾恩德霍芬技术⼤学的荷兰⽂Tchnische Hoogeschool Eindhov –en的词头缩写。
狄克斯特拉在THE这个系统中所提出的⼀系统⽅法和技术奠定了计算机现代操作系统的基础,尤其是关于多层体系结构,顺序进程之间的同步和互斥机制这样⼀些重要的思想和概念都是狄克斯特拉在THE中⾸先提出并为以后的操作系统如UNIX等所采⽤的。
为了在单处理机的情况下确定进程(process)能否占有处理机,狄克斯特拉将每个进程分为“就绪”(ready)、“运⾏”(running)和“阻塞”(blocking)三个⼯作状态。
由于在任⼀时刻最多只有⼀个进程可以使⽤处理机,正占⽤着处理机的进程称为“运⾏”进程。
当某进程已具备了使⽤处理机的条件,⽽当前⼜没有处理机供其使⽤,则使该进程处于“就绪”状态。
操作系统第6章 进程互斥与同步
Co-begin void Producer_i( ) (i=1,2…k) { item next_p; while(1){ produce an item in next_p P(empty); P(s); add next_p to buffer V(s); V(full); } } void consumer_j( ) (j=1,2…m) { item next_c; while(1){ P(full); P(s); remove an item from buffer to next_c V(s); V(empty); consume the item in next_c}} Co-end
• 进入临界段之前要申请,获得批准方可进入; • 退出临界段之后要声明,以便其他进程进入。
用程序描述: While(1){ entry_section; critical_section; exit_section; remainder_section; }
解决临界段问题的软件算法必须遵循:
准则1:不能虚设硬件指令或假设处理机数目。 准则2:不能假设n个进程的相对速度。 准则3:当一个进程未处于其临界段时,不应阻止 其他进程进入临界段。 准则4:当若干进程欲进入临界段时,应在有限时 间内选出一个进程进入其临界段。 用准则3,4不难推出下面原则 协调各进程入临界段的调度原则: • 当无进程处于临界段时,允许一个进程立即进入临界段。
3.实现临界段的硬件方法
利用处理机提供的特殊指令实现临界区加锁。 常见硬件指令有: ⑴ “Test_and_Set”指令 该指令功能描述为: int *target ( 限定为0,1) int Test_and_Set (int *target) { int temp; temp = *target ; *target = 1; return temp; }
《进程的同步》PPT课件
私用信号量:拥有信号量的进程只对信号量进行P操作
V操作由其他进程进行 用于进程间的合作
后继进程: P(s)
前驱进程: V(s)
43
2.3.3 信号量的应用
▪ 1.利用信号量实现进程互斥
P(s) 临界区
V(s)
临界 资源
P(s) 临界区
V(s)
进程A
进程B
原理:为临界资源设置一互斥信号量,初始值为1,将 个进程的临界区CS置于P(S)和V(S)操作之间即可.
Pj:...... lock( L ) C( j )
unlock( L ) ......... unlock( L ) .........
Pi: 进程i C( i ): Pi的临界区
28
出了问题的锁 L
进程 1 ......
进程 2 10
......
check: if ( L = = 1){
check: if ( L = = 1){
• 在临界区中,进程能改变变量的值,更新 数据表或写文件等。
•系统只允许一个进程在临界区执行,而不 允许其它进程进入临界区。
19
• 解决临界区问题必须遵循的原则:
1. 当某一时刻没有进程处于临界区内时,相应的临界资源处 于空闲状态。因而可允许一个请求进入临界区进程立即进 入临界区,以有效地利用临界资源。
----------源于进程 间合作,产生同步问题
10
司机
售票员
正常行车 到站停车
同步
检查车况
关车门 是
开车
否 同步
售票
否
到站停车
是 开车门
维持秩序 关车门
11
同步实现初探(二)
打印进程 1
第4章 进程的同步与互斥
mxh
同步
生产者活动:
Repeat 加工一件物品
消费者活动:
Repeat wait(full)
wait(empty)
物品放入箱中 signal(full)
箱中取一物品
signal(empty) 消耗这件物品
Until false
Until false
mxh
互斥
生产者活动:
Repeat
认为缓冲区同一时刻只有一个人可
mxh
4.1 进程的同步和互斥
信号量定义(记录型信号量)
semaphore是一个结构体: typedef struct {
int value;
//资源的个数
//进程链表
struct process *L;
} semaphore;
mxh
4.1 进程的同步和互斥 申请一个
• 信号量操作wait现在可按如 下来定义: void wait (semaphore S) { S.value - -; if (S.value <0) { add this process to S.L; block(); } }
mxh
4.1 进程的同步和互斥
• 信号量的应用
–合作进程的执行次序 –共享缓冲区的进程的同步
mxh
4.1 进程的同步和互斥
• 合作进程的执行次序:
–保证一组合作进程按照逻辑需要所确定 的次序进行。
mxh
4.1 进程的同步和互斥
• 合作进程的执行次序
–可以用一个图来表示进程集合的执行次 序。图的连接描述了进程开始和结束的 次序约束,此图称为进程流图. –例如P78,图4-2。 –使用信号量机制实现图4-2的同步。(练 习)
第三章进程管理 - PowerPoint 演示文稿
浙江教育学院 信息学院
3.6.3用P,V原语操作实现同步
解:由题意可知,进程PA调用的过程deposit(data)和进 程PB调用的过程remove(data)必须同步执行,因为过 程deposit(data)的执行结果是过程remove(data)的执 行条件,而当缓冲队列全部装满数据时,remove(data) 的执行结果又是deposit(data)的执行条件,满足同步 定义。从而,我们按以下三步描述过程deposit(data) 和remove(data): 1)设Bufempty为进程PA的私用信号量,Buffull为进 程PB的私用信号量; 2)令Bufempty的初始值为n(n为缓冲队列的缓冲区个 数),Buffull的初始值为0, 3)描述:
浙江教育学院 信息学院
信号量和P,V原语
P原语
申请资源的进程如果s<0,进 程自我阻塞,因此进程放弃 了CPU。 图3.12P原语操作功能
浙江教育学院 信息学院
信号量和P,V原语
V原语
释放资源的进程A,如果 有进程B在等待资源,A要 唤醒B进程后再返回原进 程程序执行,如果原进程 程序执行完毕,则把CPU 交给进程调度程序。
浙江教育学院 信息学院
3.7进程通信
进程通信(IPC, Inter-Process Communication)
在进程间传送数据。 操作系统可以被看作是各种进程组成的,例如用户 进程、计算进程、打印进程等。这些进程都具有各 自独立的功能,且大多数被外部需要而启动执行。 一般来说,进程间的通信根据通信的内容可以划分 为两种:
3.6同步的概念
并发进程同时访问公有数据和公有变量引出了 互斥的概念.现在研究进程的合作关系.
详解进程同步与互斥机制
详解进程同步与互斥机制⽬录⼀、什么是进程同步⼆、什么是进程互斥三、常见的进程同步与互斥机制⼀、什么是进程同步在多道批处理系统中,多个进程是可以并发执⾏的,但由于系统的资源有限,进程的执⾏不是⼀贯到底的,⽽是⾛⾛停停,以不可预知的速度向前推进,这就是进程的异步性。
那么,进程的异步性会带来什么问题呢?举个例⼦,如果有 A、B 两个进程分别负责读和写数据的操作,这两个线程是相互合作、相互依赖的。
那么写数据应该发⽣在读数据之前。
⽽实际上,由于异步性的存在,可能会发⽣先读后写的情况,⽽此时由于缓冲区还没有被写⼊数据,读进程 A 没有数据可读,因此读进程 A 被阻塞。
进程同步(synchronization)就是⽤来解决这个问题的。
从上⾯的例⼦我们能看出,⼀个进程的执⾏可能影响到另⼀个进程的执⾏,所谓进程同步就是指协调这些完成某个共同任务的并发线程,在某些位置上指定线程的先后执⾏次序、传递信号或消息。
再举个⽣活中的进程同步的例⼦,你想要喝热⽔,于是你打了⼀壶⽔开始烧,在这壶⽔烧开之前,你只能⼀直等着,⽔烧开之后⽔壶⾃然会发⽣响声提醒你来喝⽔,于是你就可以喝⽔了。
就是说⽔烧开这个事情必须发⽣在你喝⽔之前。
注意不要把进程同步和进程调度搞混了:进程调度是为了最⼤程度的利⽤ CPU 资源,选⽤合适的算法调度就绪队列中的进程。
进程同步是为了协调⼀些进程以完成某个任务,⽐如读和写,你肯定先写后读,不能先读后写吧,这就是进程同步做的事情了,指定这些进程的先后执⾏次序使得某个任务能够顺利完成。
⼆、什么是进程互斥同样的,也是因为进程的并发性,并发执⾏的线程不可避免地需要共享⼀些系统资源,⽐如内存、打印机、摄像头等。
举个例⼦:我们去学校打印店打印论⽂,你按下了 WPS 的 “打印” 选项,于是打印机开始⼯作。
你的论⽂打印到⼀半时,另⼀位同学按下了 Word 的 “打印” 按钮,开始打印他⾃⼰的论⽂。
想象⼀下如果两个进程可以随意的、并发的共享打印机资源,会发⽣什么情况?显然,两个进程并发运⾏,导致打印机设备交替的收到 WPS 和 Word 两个进程发来的打印请求,结果两篇论⽂的内容混杂在⼀起了。
网络操作系统 第三章_ppt课件
3.3通信原语设计
二.同步和异步原语 1.同步原语: 当进程调Send原语发送消息 后,便进入阻塞状态,直到消息发 送完,才能执行Send的后继语句。 当进程调Receive原语时,便阻塞, 直到收到消息保存好,才返回控 制并执行原语的后继语句。 故上述Send和Receive原语称 为同步的(阻塞的)通信原语。 形式如下: Send(dest, & mptr) 功能:将mptr指向的消息发 给标识符为dest的进程。
3.6 组通信
一. 概述:见右图 发送进程<------->接收进程 组:在某系统中或在用户指 定方式下 ,相互作用的进程 进程 进程 的集合。 特征:1对多(一个发送者发, 组中多个接收者收);动态性 (可建立、取消组,加入、撤 离组)。 目的:将一组进程抽象为一 实体。这样 一个进程可向一 组服务器发送消息,而不必知 道服务器在哪及有多少。 组通信(机制): 实现在一次 操作下将一个消息发送给多 个接收者的通信机制。 点-点通信
网络操作系统 第三章
第三章 网络os的通信
3. 利用信号量S实现进程间同步 . 进程间的同步模型:初始 S=0 进程 P1 进程 P2 L1:P(S) L2:V(S) … … (P1受P2制约,故为非对称同步)
例:生产者 、消费者问题
例:进程P1、P2共享一变量 count(临界软件资源),初始 count=0, 信号灯s=1 。
3.5 比较 两种通讯方式 : (1) 通信原语: 较大灵活性 (2) 远程过程调用:使用方便, 格式化好,透明性强。 RPC的缺点: 缺乏灵活性 (1) 在不同机型间调用参数通 用性不强。 (2)一次调用多次接收返回结 果的能力不足。 (3)缺乏传送大量数据的能力。
并发性:互斥和同步
此两种进程必须遵循一定的规则
利用信号量实现进程同步-2
• 为了实现进程同步,需采用同步信号量。 • 设置一个同步信号量full,它代表的资源是缓冲器满,它 的初值为0。这个资源是Print进程所拥有,Print进程可以 申请该资源,对它施加P操作,如条件满足Print进程可从 Buffer中取数。而Print进程的合作进程Compute对full信号 量施加V操作,即它可释放该资源。当Compute进程将数 据存入Buffer后,即可释放该资源供Print进程再使用。 • 设置另一个同步信号量empty,它代表的资源是缓冲器空, 它的初值为1 。缓冲器空这个资源是进程Compute所拥有, 它可以申请该资源,对它施加Print操作。而它的合作进程 Print对empty信号量施加V操作。
5.5 读者/写者问题
• 一个数据集(如文件)如果被几个并行进程所共享,有些 一个数据集(如文件)如果被几个并行进程所共享, 进程只要求读数据集内容,它称读者, 进程只要求读数据集内容,它称读者,而另一些进程则要 求修改数据集内容,它称写者, 求修改数据集内容,它称写者,几个读者可以同时读些数 据集,而不需要互斥,但一个写者不能和其它进程( 据集,而不需要互斥,但一个写者不能和其它进程(不管 是写者或读者)同时访问些数据集,它们之间必须互斥。 是写者或读者)同时访问些数据集,它们之间必须互斥。 • 设置互斥信号量 信号量wmutex 表示写者间、读者和写者间互 表示写者间、 设置互斥信号量 读者和写者主要程序如下 程序如下: 斥,读者和写者主要程序如下: reader: writer: 第一个读者到时P( P(wmutex) 第一个读者到时 (wmutex) ) ( ) Read Text Write Text 最后一个读者离开时 一个读者离开时V( V(wmutex) 最后一个读者离开时 (wmutex) ) (
操作系统 进程管理三互斥和同步二
while TS(&lock); critical section lock = FALSE; remainder section
• 利用TS实现进程互斥:每个临界资源设置一个 公共布尔变量lock,初值为FALSE • 在进入区利用TS进行检查:有进程在临界区时, 重复检查;直到其它进程退出时,检查通过;
Test-and-Set指令
该指令读出标志后设置为TRUE boolean TS(boolean *lock) { boolean old; old = *lock; *lock = TRUE; return old; } lock表示资源的两种状态:TRUE表示正被占用, FALSE表示空闲
6
互斥算法(TS指令)
记录型信号量和wait、signal原语
• 信号量是一个确定的二元组(value, L), value 是一个具有非负初值的整型变量,L 是 一个初始状态为空的队列。 • value代表资源的实体。在实际应用中应准确地说
明s的意义和初值;
– 初始化指定一个非负整数值,表示空闲资源总数(又称为―资源信号 量‖)--若为非负值表示当前的空闲资源数,若为负值其绝对值表示 当前等待临界区的进程数
第n个缓冲区
•Empty:有多少空缓冲区,初值为n; •Full:有多少带数据的缓冲区,初值 为0
B[n-1]
生产者消费者问题(续4)
4 用信号量实现进程的同步--生产者-消费者问题
• 我们把上面的例子扩 充,假定缓冲区 buffer 是 一 个 有 界 缓 冲 区, 可存放 n 个数据,同时 假 定 有 n 个 CP 进 程 不 断地产生数据,并送 buffer ; 有 m 个 IOP 进 程 从缓 冲区 中 取数 据 打印。 • 在我们生活中有很多 这样的例子。
江苏师范大学操作系统ppt第2章-2 进程的同步与互斥
何生产者。
33
生产者/消费者必须同步 生产者不能向满缓冲区写数据,消费者也不能在空 缓冲区中去数据,即生产者与消费者必须同步
34
生产者/消费者问题(分析)
为解决生产者消费者问题,应该设两个同步信号量, 一个说明空缓冲区的数目,用empty表示,初值为缓 冲池的大小N,另一个说明已用缓冲区的数目,用full 表示,初值为0。
24
使用wait/signal操作实现同步应注意 信号量的设置 信号量的初值 wait/signal操作要成对出现,并在不同的进 程中
25
信号量及wait、signal操作讨论
wait、signal操作必须成对出现,有一个wait操作就一定有 一个signal操作 当为互斥操作时,它们同处于同一进程 当为同步操作时,则不在同一进程中出现
生产者/消费者问题 读者/写者问题 哲学家进餐问题
28
生产者/消费者问题 生产者消费者问题是一种同步问题的抽 象描述。计算机系统中的每个进程都可以消 费(使用)或生产(释放)某类资源。这些 资源可以是硬件资源,也可以是软件资源。 当某一进程使用某一资源时,可以看作 是消费,称该进程为消费者。而当某一进程 释放某一资源时,它就相当于生产者。
如果wait(S1)和wait(S2)两个操作在一起,那么wait操作的 顺序至关重要。
一个同步wait操作与一个互斥wait操作在一起时,同步wait 操作在互斥wait操作前,而两个signal操作无关紧要。
26
wait/signal操作实现互斥与同步的模板
进程互斥 S初值为1 P1 P2
输入 进程PI 缓冲区 计算 进程PC 缓冲区 打印 进程PP
23
利用信号量实现进程同步的实例
第五章互斥与同步-PPT课件
5.4 信号量
3.整型信号量 整型信号量是通过定义一个整型变量,如s ,和 两个标准的原子操作wait(s)和 signal(s)来 对s进行减1和增1操作,以实现对临界资源的 访问控制。这两个原子操作习惯上分别被称为 P操作和V操作。 两种实现方式:忙等待与阻塞等待。
Pi:
while(true) {… while(flag[j]);/*执行空语句等待*/ flag[i]=true; 执行csi /* 进程Pi的临界区*/ flag[i]=false;/*释放临界资源*/ …}
5.3 互斥
(2)用一个turn来指示哪个进程应该进入临界 区,turn=i表示pi可以进入临界区。
(2)硬件指令的方法
TS(Test-and Set)指令 bool founction TS (bool flag) { TS =flag; flag=true;/*关闭临界区*/ }
2.互斥的硬件解决方法
例:用TS硬件指令方法实现互斥
while(true) {while(TS(lock)); 执行csi lock=false; ……}
Pi: While(true) {… while(turn!=i); /*执行空语句等待*/ 执行csi; /*临界区*/ turn=j; /* (j!=i) 释放临界资源*/ … } 强制在两个进程之间轮换,不能满足空闲让进的原则!
(3)Dekker的软件解决方法(一种正确的方法) 初始化:flag[0]=flag[1]=false;turn可以为0或1; Pi: while(true) {flag[i]=true;/*标识想进入临界区的进程*/ while(flag[j]) {if(turn==j) { flag[i]=false; while(turn==j); flag[i]=true; }} 执行csi /*执行临界区代码*/ turn=j;flag[i]=false; …… }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
47
2. 用信号灯的P、V操作实现互斥
框图描述 设:mutex为互斥信号灯,初值为1。
进程 pa
进程 pb
p(mutex)
p(mutex)
进入临界区csa
进入临界区csb
v(mutex)
v(mutex)
48
程序描述
程序 task2 main( ) { int mutex=1; cobegin pa( ); pb( ); coend }
test: if (w为1) ∕* goto test; else w=1; ∕*
}
不断的测 试锁的状 态,耗费 *∕ CPU时间
*∕
42
开锁原语
算法 unlock 输入:锁变量w 输出:无 {
w=0;∕*开锁*∕ }
2. 信号灯和P、V操作 什么是信号灯 信号灯是一个确定的二元组(s,q),s是一 个具有非负初值的整型变量,q是一个初始 状态为空的队列。操作系统利用信号灯的 状态对并发进程和共享资源进行控制和管 理。
46
程序描述 程序 task1 main( ) {
int w=1; ∕* 互斥锁 *∕ cobegin
pa( ); pb( ); coend }
47
程序描述 pa( ) {
lock(w);
csa ; unlock(w);
}
pb( ) {
lock(w);
csb ; unlock(w);
37
间接制约
由于共享某一公有资源而引起的在临界区 内不允许并发进程交叉执行的现象,称为 由共享公有资源而造成的对并发进程执行 速度的间接制约。 受间接制约的类中各程序段在执行顺序上 是任意的。 间接制约的几个进程是互斥关系
使用临界区应遵守的原则
各进程享有独立,平等的竞争共享资源的 权利。 某个进程不在临界区,不阻止其他进程进 入 排它性,只能有一个进程进入临界区 有限等待,某个进程申请使用临界区后, 必须在有限的时间内离开。
设x的初值为10,两种情况下的执行结果:
情况A: x = 10+2
情况B: x = 10+1
35
一次仅允许一个进程使用的资源称为临界资源。 硬件:如输入机、打印机、磁带机等 软件:如公用变量、数据、表格、队列等
每个进程中访问临界资源的那段程序称为临界区
进程A
csa { x := x+1;
cp
iop
A
缓冲区buf
DC BA
B
C
D
39
直接制约 一组在异步环境下的并发进程,各自 的执行结果互为对方的执行条件,从 而限制各进程的执行速度的过程称为 并发进程间的直接制约。 直接制约的进程之间是同步关系
10
4.5同步机构
操作系统提供的同步机构如下两种:
锁和上锁、开锁操作 信号灯和PV操作
1. 锁和上锁、开锁操作
44
P 操作的实现
入口
S-1 → S
≥0 S≥0 ?
0
返回
入信号灯等待队列
置“等待状态”
转进程调度
V 操作 V 操作的定义
对信号灯s的 v操作记为 v(s)。v(s)是 一个不可分割的原语操作,即取信号灯 值加1,若相加结果大于零,进程继续执 行,否则,要帮助唤醒在信号灯等待队 列上的一个进程。
45
V 操作的实现
入口
S+1 → S >0
S≤0 ?
从信号灯的等待队列中取出首元素
入就绪队列 置“就绪状态”
返回
PV操作是通过原语实现的
4.6 进程互斥的实现
1. 用上锁原语和开锁原语实现进程互斥
框图描述
进程 pa
进程 pb
上锁原语 进入临界区csa
开锁原语
上锁原语 进入临界区csb
开锁原语
34
例2:两个进程共享一个变量x
两个进程共享一个变量x时,两种可能的执行次序:
A:
p1: r1 := x;r1:= r1+1; x := r1 ;
p2:
r2:= x;r2 := r2+1; x := r2 ;
B:
p1: r1 := x;
r1:= r1+1; x := r1 ;
p2:
r2:= x;r2 := r2+1; x := r2 ;
进程B
csb { x := x+1;
36
互斥 在操作系统中,当某一进程正在访问某一存储区域时, 就不允许其他进程来读出或者修改存储区的内容,否则, 就会发生后果无法估计的错误。进程间的这种相互制约 关系称为互斥。
进程A
csa { x := x+1;
进程B
csb { x := x+1;
2. 进程同步的概念
什么是进程同步 并发进程在一些关键点上可能需要互相等待与互通消息, 这种相互制约的等待与互通消息称为进程同步。
进程同步的例 病员就诊
看病活动:
要病人去化验;
等化验结果;
继续诊病;
化验活动:
需要进行化验 ?
进行化验; 开出化验结果;
38
共享缓冲区的计算进程与打印进程的同步 计算进程 cp和打印进程 iop公用一个单缓冲
∕* 互斥信号灯 *∕
49
程序描述
pa( ) { p(mutex); csa ; v(mutex); }
pb( ) { p(mutex); csb ; v(mutex);
}
信号灯可能的取值
4.4 进程之间的约束关系
程序并发执行的相互制约
间接的相互制约关系 —— 资源共享(竞争资 源系统) 直接的相互制约关系 —— 公共变量(进程协 作)
1. 进程互斥的概念 临界资源 例1:x代表某航班机座号,p1和p2两个售票进 程,售票工作是对变量x加1。这两个进程在一 个处理机C上并发执行,分别具有内部寄存器 r1和r2。
什么是锁 用变量w代表某种资源的状态,w称为“锁” 。 上锁操作和开锁操作
检测w的值 (是0还是1);
如果w的值为1,继续检测;
如果w的值为0,将锁位置1 (表示占用资源),进入临
界区执行。
(此为上锁操作)
临界资源使用完毕,将锁位置0。 (此为开锁操作)
40
上锁原语Βιβλιοθήκη 算法 lock 输入:锁变量w 输出:无 {
43
信号灯
信号灯是整型变量。 变量值 ≥ 0 时,表示绿灯,进程执行; 变量值 0 时,表示红灯,进程停止执
行。 注意:创建信号灯时,应准确说明信号灯
s 的意义和初值 (这个初值 绝不能为负值)。
P 操作 P 操作的定义 对信号灯s的 p操作记为 p(s)。p(s)是一 个不可分割的原语操作,即取信号灯值 减1,若相减结果为负,则调用p(s)的进 程被阻,并插入到该信号灯的等待队列 中,否则可以继续执行。