T46 前驱后继 同步互斥 两个线程包含多个操作

设某进程的两个线程 T1 和 T2, 其中 T1 包含操作 A E F, T2 包含操作 B C D.

A->C B->C
C->E C->D
E->F

分析

  • 线程内部操作顺序执行:天然满足
  • 线程之间的操作顺序:使用信号量同步
semaphore semA = 0, semC = 0;
void T1() {
    // 执行操作 A
    V(semA); // 释放 A 的信号量
    P(semC); // 等待 C 完成
    // 执行操作 E
    // 执行操作 F
}
void T2() {
    // 执行操作 B
    P(semA); // 等待 A 完成
    // 执行操作 C
    V(semC); // 释放 C 的信号量
    // 执行操作 D
}