以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 计算机考研交流 』 (http://bbs.xml.org.cn/list.asp?boardid=67) ---- 南京大学操作系统PV和管程题交流专帖(请Logician指教) (http://bbs.xml.org.cn/dispbbs.asp?boardid=67&rootid=&id=56265) |
-- 作者:p11y06d0 -- 发布时间:12/1/2007 7:39:00 PM -- 南京大学操作系统PV和管程题交流专帖(请Logician指教) 1.(07CS)桌上有一只可以容纳两个水果的盘子,每次只能放入或取出一个水果。爸爸削苹果,削好苹果后放入盘子中,妈妈剥桔子,剥好桔子后放入盘子中,两个儿子专等吃盘子中的苹果,两个女儿专等吃盘子中的桔子。试用信号量和P、V操作,编写实现爸爸、妈妈、儿子和女儿间并发工作的程序。 var B : array [0..1] of (apple, orange, empty) ; sapp, sora, mutex, s: semaphore := 0, 0, 1, 2 ; cobegin process father begin L1: 削一个apple; P(s); P(mutex); If B[0]=empty then B[0]:=apple else B[1]:=apple; V(mutex); V(sapp); goto L1; end; process son_i(i:=1,2) //两个儿子的处理法对不对? begin L2 : P(sapp); P(mutex); If B[0]=apple then B[0]:=empty else B[1]:=empty; V(mutex); V(s); 吃一个apple; goto L2; end; process mother begin L3: 剥一个orange; P(s); P(mutex); If B[0]=empty then B[0]:=orange else B[1]:=orange; V(mutex); V(sora); goto L3; end; process daughter_j(j:=1,2) //两个女儿的处理法对不对? begin L4: P(sora); P(mutex); If B[0]=orange then B[0]:=empty else B[1]:=empty; V(mutex); V(s); 吃一个orange; goto L4; end; coend. 自己做的,不知对错,大家帮忙看看。
[此贴子已经被作者于2007-12-2 16:30:49编辑过]
|
-- 作者:p11y06d0 -- 发布时间:12/2/2007 4:29:00 PM -- 2.(07,Soft)桌上有一只盘子,可以放入N只水果。爸爸每次向盘子中放入一只苹果(apple),妈妈每次向盘子中放入一只桔子(orange),一个儿子每次从盘子中取一只桔子吃,一个女儿每次从盘子里取一只苹果吃。请用PV操作写出保证它们正确运行的程序。 信号量和上题一样,s用于对盘子里的水果计数,mutex用于对放水果和取水果的互斥,另外两个同步信号量sapp和sora用于通知儿子、女儿.由于盘子可放N个水果,可把盘子看作环形缓冲区,向盘子里放水果父母各自放各自的,互不影响,但儿子女儿取水果时盘子里可能既有苹果,又有桔子,用if来检测,这样不知对不对? var B : array[0..N-1] of (apple, orange); |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
46.875ms |