- 1、本文档共70页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章进程同步与通信xiugai
第3章 进程同步与通信;取空闲块的进程Getspace:
Begin
局部变量 g
g=stack[top]
top=top-1
返回值为g
End;●;程序的制约方式有如下两种 :
(1)间接制约方式。?互斥
这是由于竞争相同资源而引起的,得到资源的程序段可以投入运行,而得不到资源的程序段就是暂时等待,直至获得可用资源时再继续运行。
(2)直接制约方式。?同步
这通常是在那些逻辑上相关的程序段之间发生的。一般是由于各种程序段要求共享信息引起的。;进程同步的基本概念;;例:P1,P2两线程共享变量COUNT(COUNT的初值为5)
P1:{
R1=COUNT;
R1=R1+1;
COUNT=R1; }
P2:{
R2=COUNT;
R2=R2+1;
COUNT=R2; };While(1){
;互斥实现的硬件方法;;互斥实现的软件方法;//进程0
while (flag[1])
//什么都不做 ;
flag[0]=true;
临界区;
flag[0] =false;
剩余区;
//进程1
while ( flag[0])
//什么都不做 ;
flag[1]=true;
临界区;
flag[1] =false;
剩余区;;//进程0
flag[0]=true;
while (flag[1])
//什么也不做;
临界区;
flag[0] =false;
剩余区;;//进程0
flag[0]=true;
turn=1;
while (flag[1]) (turn==1)
//什么也不做;
临界区;
flag[0] =false ;
剩余区;;信号量和PV操作;信号灯的PV操作;从资源的观点看信号灯的意义:
● s.value的初值表示系统中某种资源数目。
● wait(s)表示要申请一个资源。
● signal(s)表示要释放一个资源。
● s.value 0时,|s.value|表示等待队列的进程数。;信号量和P,V原语;sem为互斥信号量,取值(1,0,-1)。
sem=1表示有一个空闲资源。即,进程PA和PB都没进临界区。
sem=0表示有0个空闲资源。即,某进程已经进入临界区
sem=-1表示差一个空闲资源。即,某进程已经进入临界区,但另有一进程已经做了P原语,正在等待。;用信号灯解决互斥问题;A: 测试,直到buf为空
计算
计算结果?buf
goto A;A: wait(Bufempty)
计算
计算结果?buf
Bufempty=false
signal(Buffull=true)
goto A;私用信号量;用P,V原语实现同步;用信号灯解决同步问题;●生产者——消费者问题
●读者——写者问题
●哲学家进餐问题
●打磕睡的理发师问题
;生产者-消费者问题;用信号量解决“生产者-消费者”问题;读者-写者问题;;void reader() /*读者进程*/
{while (true)
{ P(Rmutex);
if (Rcount == 0) P(Wmutex);
Rcount = Rcount + 1;
V(Rmutex);
read; /* 执行读操作 */
P(Rmutex);
Rcount = Rcount - 1;
if (Rcount == 0) V(Wmutex);
V(Rmutex);
}};哲学家进餐问题;;打磕睡的理发师问题 ;用信号量解决打磕睡的理发师问题; 用信号量解决了很多同步和互斥问题,但在解决问题的过程中,我们也发现还存在一些问题,如
在生产者和消费者问题中两个P操作的位置不能颠倒;
哲学家进餐问题中的死锁现象等。
这些问题的出现促使AND信号量的产生 。;Swait(s1,s2,…,sn)
{if (s1 = 1 s2 = 1 … sn= 1)
{ /* 满足资源要求时*/
for (i = 1; i = n; i = i + 1)
si = si -1; }
else
{ /* 某些资源不能满足要求时*/
block(si.queue ) /*将进程投入第一个小于1的信号量的等待队列si.queue */ ;
}
}
;AND信号量定义;用AND信号量解决哲学家进餐问题;管程机制;●一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。
●管程
= 数据结构
+ 操作
+ 对数据结构中变量的初始化
;;条件变量
●用管程实现进
您可能关注的文档
- 第14课匈奴的兴起及与汉朝的和12战.ppt
- 第12课新潮冲击下的社会生活[历史必修二].ppt
- 第16课中外的交往和冲突2.ppt
- 第18课中国社会主义经济建设的曲折发展[刘].ppt
- 第1单元第1课从百草园到三味书屋2.ppt
- 第18课“广玉兰”第二课时课件.ppt
- 第16课昌盛的秦汉文化[一].ppt
- 第18章量子力学初步[电子工业出版社new].ppt
- 第19-21课近代社会生活.ppt
- 第1章c基础知识3.ppt
- 某区纪委书记年度民主生活会“四个带头”个人对照检查材料.docx
- 某县纪委监委2024年工作总结及2025年工作计划.docx
- 某市场监督管理局2024年第四季度意识形态领域风险分析研判报告.docx
- 县委书记履行全面从严治党“第一责任人”职责情况汇报.docx
- 税务局党委书记2024年抓党建工作述职报告.docx
- 某市税务局副局长202X年第一季度“一岗双责”履行情况报告.docx
- 副县长在全县元旦春节前后安全生产和消防安全工作部署会议上的讲话.docx
- 某市委书记个人述职报告.docx
- 某县长在县委常委班子年度民主生活会个人对照检查材料1.docx
- 某县长在县委常委班子年度民主生活会个人对照检查材料.docx
文档评论(0)