T45 同步互斥 前驱后继
- 对于关系
A->C, 需要确保C在A完成后才能执行- 前驱
A完成后,通过V(semA)释放信号量 - 后继
C执行前,通过P(semA)等待信号量
- 前驱
设有 5 个操作:A, B, C, D, E, C 依赖于 A 和 B; E 依赖于 C 和 D.
semaphore semA = 0, semB = 0, semC = 0, semD = 0;
void processA() {
// 执行操作 A
V(semA); // 释放 A 的信号量
}
void processB() {
// 执行操作 B
V(semB); // 释放 B 的信号量
}
void processC() {
P(semA); // 等待 A 完成
P(semB); // 等待 B 完成
// 执行操作 C
V(semC); // 释放 C 的信号量
}
void processD() {
// 执行操作 D
V(semD); // 释放 D 的信号量
}
void processE() {
P(semC); // 等待 C 完成
P(semD); // 等待 D 完成
// 执行操作 E
}