《野猪乐园》显示文章详细内容: [展开] [回复] [网址] [举报] [屏蔽]
cool-net
cool-net目前处于离线状态
等    级:高级居民
经 验 值:176
魅 力 值:70
龙    币:1013
积    分:409.3
注册日期:2006-04-03
 
  查看cool-net个人资料   给cool-net发悄悄话   将cool-net加入好友   搜索cool-net所有发表过的文章   给cool-net发送电子邮件      

咦?考《操作系统》了?
设共享缓冲区为:B
设已写入信号量:S1=0
设已处理信号量:S2=1

进程A:
BEGIN:
  P(S2)  // 等待缓冲区处理完成(或初始进入,因初始S2=1,所以不会阻塞)
  B=READ_NEXT // 读取
  V(S1)  // 设置缓冲区有效标志,唤醒处理进程
  GOTO BEGIN // 进入下一轮循环


进程B:
INIT:
  S=0 // 初始化累加和变量
BEGIN:
  P(S1)  // 等待缓冲区生效标志
  IF B MOD 3 = 0 THEN
    S = S + B  // 如果应该本进程处理则进行处理(执行累加)
    V(S2)  // 并且设置缓冲已处理标识唤醒进程A读取下一个数字
  ELSE
    V(S1)  // 如果不应该本进程处理则唤醒其它处理进程(C或D)
  GOTO BEGIN // 进入下一轮循环

进程C:
INIT:
  S=0
BEGIN:
  P(S1)
  IF B MOD 3 = 1 THEN
    S = S + B
    V(S2)
  ELSE
    V(S1)
  GOTO BEGIN


进程D:
INIT:
  S=0
BEGIN:
  P(S1)
  IF B MOD 3 = 2 THEN
    S = S + B
    V(S2)
  ELSE
    V(S1)
  GOTO BEGIN


说明:
1、题目没说明退出条件,写成永久循环形式。
2、这个答案可能是最简单的,但并不一定是吞吐量最高的。
3、这类题目多数无需限定操作系统和程序语言种类(因为其考查的知识具有极强的通用性),用伪代码+原语写成当属惯例。
4、友情码字,如有错误,概不负责。
(此文由cool-net在2009-12-16 19:27:01编辑过)
2009-12-16 19:25:23   此文章已经被查看281次   
 相关文章: [回复]  [顶端] 



  您必须登录论坛才可以发表文章:
 
用户名:   密码:   记住密码:    (忘记密码 注册




版权所有 回龙观社区网 经营许可证编号:京B2-20201639 昌公网安备1101140035号

举报电话:010-86468600-5 举报邮箱: