T45 同步互斥 前驱后继

  • 对于关系 A->C, 需要确保CA完成后才能执行
    • 前驱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
}