第 45 题
现有 5 个操作 A、B、C、D 和 E,操作 C 必须在 A 和 B 完成后执行,操作 E 必须在 C 和 D 完成后执行,请使用信号量的 wait()、signal() 操作(P、V 操作)描述上述操作之间的同步关系,并说明所用信号量及其初值。
[tag_link]
本题要求实现操作的先后顺序,没有互斥关系,是一个简单的同步问题。本题虽然有 5 个操作,但是只有 4 个同步关系,因此分别设置信号量 SAC、SBC、SCE 和 SDE 对应 4 个同步关系。
semaphore SAC = 0; // 实现 A 是 C 的前驱关系
semaphore SBC = 0; // 实现 B 是 C 的前驱关系
semaphore SCE = 0; // 实现 C 是 E 的前驱关系
semaphore SDE = 0; // 实现 D 是 E 的前驱关系
A() {
操作A;
V(SAC);
}
B() {
操作B;
V(SBC);
}
C() {
P(SAC);
P(SBC);
操作C;
V(SCE);
}
D() {
操作D;
V(SDE);
}
E() {
P(SCE);
P(SDE);
操作E;
}