【发布时间】:2012-01-04 22:07:42
【问题描述】:
你将如何完成这个方案以及你将使用多少个信号量来获取
a) ABCD ACBD 序列
b) ABCD ABDC 序列
使用这两个进程(考虑使用伪代码es:wait(s1) signal(s1) etc...)
流程 1
P1:while(1){
.
printf("A");
.
.
printf("C");
.
}
流程 2
P2:while(1){
.
printf("B");
.
.
printf("D");
.
}
将点视为可以插入缺失代码(基元)的地方
@杰瑞
经过一些互联网研究,我想我的第一点 (a) 已经解决了,
解决方案是构建这样的优先级图
A<--(s0)--^
/ \ |
(s1)-- --(s2) |
(me)------- |
/ \ |
B C |
\ / |
-------(s3) |
\ / |
D-------->|
INIT(s0)=INIT(ME)=1 并且 INIT(s1)=INIT(s2)=INIT(s3)=0
所以我有 P1
P1:while(1){
wait(s0);
printf("A");
signal(s2);
signal(s1);
wait(s1);
wait(ME);
printf("C");
signal(ME);
signal(s3)
}
和P2
P2:while(1){
wait(s2);
wait(ME);
printf("B");
signal(s3);
signal(ME);
wait(s3);
wait(s3);
printf("D");
signal(s0)
}
您认为我的方法正确吗?我可以减少更多使用的信号量吗? (目前有 5 个(2 个互斥体和 3 个正常))
【问题讨论】:
-
我认为通常的问题适用:到目前为止您尝试了什么以及遇到了什么问题?
-
什么样的陈述应该放在点上?只有信号量操作或 ifs、打印等?
-
我已经用我试图找到的解决方案编辑了这个问题,请检查一下,让我知道它是否正确以及我是否可以减少更多使用的信号量。
标签: c synchronization operating-system semaphore