版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
生产者-消费者问题(theproducer-consumer 读者-写者问题(thereaders-writers 哲学家进餐问题(thediningphilosophers OSOS 消费者线程(eventhandlers)从缓冲区取出 读者-写者问题(thereaders-writersproblem)§问题描述:对共享资源的读写操作,任一时刻“写者”§实际应用场景,对共享数据结构、数据库、文件的多线程并发。 分类互斥问题intreaders=0//记录临界区内读者的数目mutexSemaphore(1)//保护对readers的roomEmpty=Semaphore(1)//对屋子的互 //criticalregion
ifreaders==1://第一个读者read//criticalregionreaders=readers-1;ifreaders==0:intreaders=0Semaphoremutex=1SemaphoreroomEmpty=
ifreaders1read//criticalregionreaders=readers-ifreaders==0://criticalregion
ifreaders1read//criticalregionreaders=readers-1;ifreaders==0: classdef self.counter0//封装计数器和互斥锁self.mutex=Semaphore(1)deflock(self,semaphore)://信号量是参数self.counter+=1ifself.counter==1:defunlock(self,self.counter-=1ifself.counter==roomEmpty=read#criticalsectionwrite//criticalregion§增加一个限制条件:同时读的“读者”最多RN§mx表示“允许写”,初值是§L表示“允许读者数目”,初值为SP(mx,1,1;L,RN,SV(mx,1);L>=RN
SP(L,1,1;mx,1,SV(L,1);SP(S,1,0):可作为一个可控开关:(当S≥1时,允许多个进程进入临 //criticalregion
对读者
ifreaders1read//criticalregionreaders=readers-1;ifreaders==0:还是对写者有利?
ifreaders1 t(Starvation)! readers=readers-1;ifreaders==0:对读 还是对写者有利? roomEmpty=read#criticalsection一种低级通信原语:屏障 n=thenumberofcount=0semaphoremutex=1//保护semaphorequeue=0//进程到达之前都是0count=count+ifcount==n:V(queue)#第nP(queue)#前n-1V(queue queue= intreaders=0Semaphoremutex=1
SemaphoreroomEmpty=1Semaphoreturnstile=write//criticalregion
ifreaders1read//criticalregionreaders=readers-ifreaders==0:intreaders=0Semaphoremutex=
SemaphoreroomEmpty=1Semaphoreturnstile=write//critical
ifreaders1read//criticalregionreaders=readers-ifreaders==0:readSwitch=roomEmpty=#criticalsectionforwriters#criticalsectionforreaders readSwitch=roomEmpty=turnstile=#criticalsectionfor#criticalsectionfor semaphorecustomers0等待理发的顾客semaphorebarbers0;//等待顾客的理发师semaphoremutex=1;//互斥waitingintwaiting0;//(不包含正在理发的顾客
#defineCHAIRS5 //chairsforwaitingcustomerstypedefintsemaphore;semaphorecustomers=0;//#ofcustomerswaitingsemaphorebarbers=0;//#ofbarberswaitingcustomerssemaphoremutex=1;//formutualexclusionofwaitingintwaiting=0;//customerarewaiting(notbeingcut)voidbarber(void){while(TRUE){P(&customers);/*gotosleepif#ofcustomersis0*/P(&mutex);/*acquireaccessto"waiting'*/waiting=waiting-1;/*decrementcountofwaitingcustomers*/V(&mutex);/*release'waiting'*/V(&barbers);/*onebarberisnowreadytocuthair*/cut_hair();/*cuthair(outsidecriticalregion*/}}voidcustomer(void)down(&mutex);/*entercriticalregion*/if(waiting<CHAIRS){/*ifthereare chairs,leavewaiting=waiting+1;/*incrementcountofwaitingcustomers*/V(&mutex);/*releaseaccessto'waiting'*/V(&customers);/*wakeupbarberifnecessary*/P(&barbers);/*gotosleepif#of barbersis0*/get_haircut();/*beseatedandbeserved*/}elseV(&mutex);/*shopisfull;donotwait}}§某银行有n个服务柜台。每个顾客进店后先取一个号,§§§某银行有n个服务柜台。每个顾客进店后先取一个号,§§intnext_cstmr0Semaphores_mutex=1;//服务器进程互斥 t=0;//客户服务器进程同步processcustomeri }
processserversi(i=1,...,n) next_cstmr++;}§某银行有n个服务柜台。每个顾客进店后先取一个号,§§intnext_cstmr0Semaphores_mutex=1;//服务器进程互斥 t=0;//客户服务器进程同步processcustomeri }
processserversi(i=1,...,n) next_cstmr++;}intcstmr_id=0; semaphoremutex=1;cstmr_id互斥intnext_cstmr=0;//下一个要服务客户编号semaphores_mutex=1;next_cstmrprocesscustomericstmr_id++;}
processserversi(i=1,...,n)if(next_cstmr<next_cstmr++;} §BerkeleyOS§GregoryR.Andrews.ConcurrentProgramming:PrinciplesandPractice.Addison-Wesley,1991.§存在两种线程,一个线程提供氧原子O,一个线程提供§当线程通过barrier,需要调用bond(形成化学键),§只需要保证成组通过 BerkeleyOS§存在两种线程,一个线程提供氧原子O,一个线程提供§当线程通过barrier,需要调用bond(形成化学键),§只需要保证成组通过barrier oxygen=0//氧原子的计数器hydrogen0Semaphoremutex1)//SemaphoreoxyQueue=0//氧气线程等待的信号量SemaphorehydroQueue=0//氢气线程等待的信号量P(oxyQueue)表示加入队列V(oxyQueue)表示离开队列 oxygen+=
h= 构建H2h= ydrogen+=
构建H2Oifhydrogen>hydrogen-=2
hydrogen>=2andoxygen>=hydrogen-=2oxygen-=1
oxygen-11
不成功释放 oxygen+=ifhydrogen>=2:hydrogen-=2oxygen-=1构建H2O构建H2O成功,有一个mutex没释放,释放
hydrogen+=ifhydrogen>=2andoxygen>=1:hydrogen-=oxygen-=1虽然我们不知道那个线程holdmutext,但是 oxygen+=1ifhydrogen>=2:hydrogen-=2oxygen-=1
hydrogen+=1ifhydrogen>=2andoxygen>=1:hydrogen-=oxygen-=1死锁§§§死锁问题§如果一个进程集合中的每个进程都在等待只能由该进程集合中其他进程才能的,那么该进程死锁问题§如果一个进程集合中的每个进程都在等待只能由该进程集合中其他进程才能的,那么该进程 … …
… … … 。如CPU,§非可资源:当系统把这类资源分配给某进程放。如CD刻录机、;耗性资源。如消息、中断;(不可)P1:Relese(S1);Request(S3);P2:Relese(S2);Request(S1);P3:Relese(S3);Request(S2);P1:Request(S3);Relese(S1); 定义两个信号量,aArrivedbArrived,并且初始化为北北§full是“满”数目,初值为0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年就餐实施方案
- 美甲店临时涨价方案
- 期中测试提升卷-2024-2025学年人教PEP版英语六年级上册(含答案含听力原文无音频)
- 山西公务员面试模拟46
- 小学语文学习任务单的设计与实施
- 江苏行政职业能力C类模拟12
- 浙江公务员面试模拟78
- 2015年6月28日上午陕西公务员面试真题
- 地方公务员广东申论40
- 河北省公务员面试模拟202
- PPT模板:严谨实用国奖答辩国家奖学金申请课件
- 小学五年级下册科学课件-4.3《火山》1人教版(28张)ppt课件
- 中小学生心理健康量表(共9页)
- 预制盖板工程施工组织设计方案
- 变形美术字设计
- 汽车灯光系统--ppt课件
- 配合比调整权限
- 小学语言文字工作计划例文
- 标准气体的配制课件
- 外伤性颅底脑脊液漏的处理策略
- 平菇栽培技术ppt
评论
0/150
提交评论