没有合适的资源?快使用搜索试试~ 我知道了~
首页操作系统同步与互斥经典题目!!!11
操作系统同步与互斥经典题目!!!11

1、 设公共汽车上,司机和售票员的活动分别是: 司机的活动:启动车辆; 正常行车; 到站停车; 售票员的活动: 关车门; 售票; 开车门; 在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。
资源详情
资源评论
资源推荐

1、 设公共汽车上,司机和售票员的活动分别是:
司机的活动:启动车辆;
正常行车;
到站停车;
售票员的活动:
关车门;
售票;
开车门;
在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用
P、V 操作实现它们的同步。
设两个信号量 S 和 C,初值为 S=0;C=0;
司机: L1: 正常行车 售票员: L2: 售票
到站停车 P(S)
V(S) 开车门
P(C) 关车门
启动开车 V(C)
GO TO L1 GO TO L2
2、桌子上有一个空盘子,允许存放一只水果,爸爸可以向盘中放苹果,妈妈向
盘子中放橘子,女儿专门吃盘子中的苹果,儿子专门吃盘子中的橘子。规定当
盘子空的时候一次只能放一只水果,请用信号量实现他们之间的同步与互斥。
S, S1, S2 :semaphore=1,0,0;
Cobegin:
Process Father:
Begin:
L1: P(S);
Put Apple;
V(S1);
GO TO L1;
End;
Process Mother:
Begin:
L2: P(S);
Put Orange;
V(S2);
GO TO L2;
End;
Process Son:
Begin:
L3: P(S2);
Get Orange;
V(S);

GO TO L1;
End;
Process Daughter:
Begin:
L4: P(S1);
Get Apple;
V(S);
GO TO L4;
End;
CoEnd;
2、 写者优先的“读者――写者”问题:
1)共享读
2)互斥写、读写互斥
3)写者优先于读者(一旦有写者,则后续 读者必须等待,唤醒时优先考虑写
者)
wmutex:semaphore=1 //读者与写者之间、写者与写者之间互斥使用共享数据
S:semaphore=1 //当至少有一个写者准备访问共享数据时,它可使后续的读
者等待写完成
S2:semaphor=1 //阻塞第二个以后的等待读者
readcount,writecount: semaphore = 0,0; //当前读者数量、写者数量
mutex1 :semaphore = 1 //多个读者互斥使用 readcount
mutex2 :semaphore = 1 //多个写者互斥使用 writecount
Cobegin:
Reader: begin
Repeat
Wait(S2);
wait(S);
wait(mutex1)
if readcount=0 then wait(wmutex);
readcount++;
signal (mutex1);
signal(S);
signal(S2);
reading…
wait(mutex1);
readcount--;
if readcount=0 then signal(wmutex);
signal(mutex1);
until false;
begin;
writer: begin
repeat;
wait(mutex2);

if writecount=0 then wait(S);
writecount++;
signal (mutex2);
wait(wmutex);
writing…
signal(wmutex);
wait(mutex2);
writecount--;
if writecount=0 then signal(S);
signal (mutex2);
until false;
end;
coend;
4、有一个仓库,可以存放 A、B 两种产品,但要求:
1 每次只能存入一种产品(A 或 B);
2 A 产品数量-B 产品数量<M;
3 B 产品数量-A 产品数量<N;
其中 M、N 是正整数,使用 P、V 操作描述产品 A 与产品 B 的入库过程。
Mutex,Sa,Sb: Semaphore;
Mutex =1;
Sa=M-1;
Sb=N-1;
CoBegin:
Process PA:
Begin
Loop:
P(Sa);
P(Mutex);
产品 A 入库;
V(Mutex);
V(Sb);
Goto Loop;
End;
Process PB:
Begin
Loop:
P(Sb);
P(Mutex);
产品 B 入库;
V(Mutex);
V(Sa);

Goto Loop;
End;
CoEnd;
5、进程 A1、A2、……An1 通过 m 个缓冲区向进程 B1、B2……Bn2 不断地发
送消息。发送和接收工作遵循如下规则:
(1) 每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等
于消息长度;
(2) 对每一个消息,B1,B2,…,Bn 都必须接收一次,读入各自的数据
区内;
(3)m 个缓冲区都满时,发送进程等待;没有可读的消息时,接收进程等
待。
解答:本题是生产者——消费者问题的一个变形,一组生产者 A1,A2,
…….An1 和一组消费者 B1,B2,……Bn2 公用 m 个缓冲区,每个缓冲区只
要写一次,但需要读 n2 次,因此,我们可以把这一组缓冲区看成 n2 组缓冲
区,每个发送者需要同时写 n2 组缓冲区,而每一个接收者只需读它自己对
应的那组缓冲区中的对应单元。
Mutex,empty[n2],full[n2]:semaphore;
Mutex=1; //多进程互斥使用缓冲区
empty[0,1,……n2]={m,m,……m};
full[0,1,…..n2]={0,0,……0};
int I;
Cobegin:
Process Ai
Begin:
Loop:
Int I;
For ( I=0; I<n2; I++)
P (empty[I]);
P(Mutex);
将消息放入缓冲区;
v(Mutex);
for( I=0; I <n2; I++)
v(full[I]);
Goto Loop;
End;
Process Bi
Begin:
Loop:
P (full[I]);
P(Mutex);
从消息缓冲区取出消息;
v(Mutex);
剩余19页未读,继续阅读

















木可大大
- 粉丝: 106
- 资源: 12
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论2