- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
04进程管理三互斥和同步一
* 2. 一般“信号量集” 一次需要N个某类临界资源时,就要进行N次wait操作--低效又可能死锁 基本思想:在AND型信号量集的基础上进行扩充:进程对信号量Si的测试值为ti(用于信号量的判断,即Si = ti,表示资源数量低于ti时,便不予分配),占用值为di(用于信号量的增减,即Si = Si - di和Si = Si + di) Swait(S1, t1, d1; ...; Sn, tn, dn); Ssignal(S1, d1; ...; Sn, dn); 一般信号量集用于同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的处理; * 一般信号量集的几种特定情况: Swait(S, d, d)表示每次申请d个资源,当少于d个时,便不分配; Swait(S, 1, 1)表示互斥信号量; Swait(S, 1, 0)作为一个可控开关 当S=1时,允许多个进程进入临界区; 当S=0时,禁止任何进程进入临界区; 一般信号量集未必成对使用Swait和Ssignal:如:一起申请,但不一起释放; * 1. 生产者-消费者问题(the producer-consumer problem) 问题描述:若干进程通过有限的共享缓冲区交换数据。其中,生产者进程不断写入,而消费者进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。 * 生产者-消费者问题- AND型信号量 若不愿意考虑wait操作的先后顺序,也可用AND型信号量来实现。 生产者进程中: 用Swait(empty,mutex)代替wait(empty)和wait(mutex), 用Ssignal(mutex,full)代替signal(mutex)和signal(full) 消费者进程中 用Swait(full,mutex)代替wait(full)和wait(mutex), 用Ssignal(mutex,empty)代替signal(mutex)和signal(empty) * 2. 读者-写者问题(the readers-writers problem) 问题描述:对共享资源的读写操作,任一时刻“写者”最多只允许一个,而“读者”则允许多个 “读-写”互斥, “写-写”互斥, 读-读允许 * 采用信号量机制: Wmutex表示允许写,初值是1。 公共变量Rcount表示“正在读”的进程数,初值是0; Rmutex表示对Rcount的互斥操作,初值是1。 * 采用一般信号量集机制:问题增加一个限制条件:同时读的读者最多R个 Wmutex表示允许写,初值是1 Rcount表示允许读者数目,初值为R * 3. 哲学家进餐问题(the dining philosophers problem) 问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5支筷子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。如何保证哲学家们的动作有序进行?如:不出现相邻者同时要求进餐;不出现有人永远拿不到筷子; * * 1.利用记录型信号量机制解决 2.利用AND型信号量机制解决 2.4.2哲学家就餐问题 * 哲学家就餐问题 问题分析: 筷子是临界资源:每根有多于一个哲学家要用,而且同时只能有一个哲学家使用 5根筷子可以用5个信号量表示。形成信号量数组: var chopstick:array[0,…4]of semaphore; 所有信号量初值为1,表示未被使用。 * 哲学家就餐问题 第i位哲学家的活动描述为: Repeat wait(chopstick[i]); wait(chopstick[(i+1)mod 5]); eat; signal(chopstick[i]); signal(chopstick[(i+1)mod 5]); think; Until false; parbegin philosopher (0); philosopher (1); philosopher (2); philosopher (3); philosopher (4); parend * 哲学家就餐问题 可能产生死锁: 五位哲学家同时饥饿,各自拿起左边的筷子时,会使得所有信号量的值为0,再试图拿起右边的筷子时,都将拿不到筷子。 解决死锁的方法: 至多允许四个哲学家同时进餐。 仅当哲学家的左右两支筷子均可用时,才进餐。(用AND信号量机制解决哲学家进餐问题。) 奇数号哲学家先拿左边的筷子,偶数号哲学家先拿右边的筷子。 * AND型信号量机制解决哲学家就餐问题 要求哲学家同时获得两根筷
原创力文档


文档评论(0)