- 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信号量解决哲学家进餐问题;管程机制;●一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。
●管程
= 数据结构
+ 操作
+ 对数据结构中变量的初始化
;;条件变量
●用管程实现进
您可能关注的文档
最近下载
- 2024年大学生预防艾滋病知识竞赛判断题库及答案(共100题).doc VIP
- 家长会防性侵安全教育.pptx VIP
- T CACM 成年人中医体质治未病干预指南.pdf VIP
- 心血管系统疾病3-风湿病与心瓣膜病课件.ppt
- 2024届高考语文复习:散文阅读+课件.pptx VIP
- 食品经营许可和备案管理办法(100题).docx
- Q∕GDW 11059.2-2013 特高频法局部放电带电检测技术现场应用导则.pdf
- 初来乍到第一季(中英对照台词)Fresh Off the Boat S01.pdf
- T CACM 食管癌前病变治未病干预指南.pdf VIP
- 部编版语文三年级上册看拼音写词语全册汇总(练习+答案).pdf VIP
文档评论(0)