|
等 级:高级居民 |
经 验 值:176 |
魅 力 值:70 |
龙 币:1013 |
积 分:409.3 |
注册日期:2006-04-03 |
|
|
|
咦?考《操作系统》了?
设共享缓冲区为: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编辑过)
|
|
|
|