操作系统
2022-46
某进程的两个线程 T1 和 T2 并发执行 A、B、C、D、E 和 F 共 6 个操作,其中 T1 执行 A、E 和 F,T2 执行 B、C 和 D。题 46 图表示上述 6 个操作的执行顺序所必须满足的约束:C 在 A 和 B 完成后执行,D 和 E 在 C 完成后执行,F 在 E 完成后执行。请使用信号量的 wait()、signal() 操作描述 T1 和 T2 之间的同步关系,并说明所用信号量的作用及其初值。

答案
信号量 S_AC 描述 A、C 之间的同步关系,初值为 0,保证 C 在 A 完成后执行;信号量 S_CE 描述 C、E 之间的同步关系,初值为 0,保证 E 在 C 完成后执行。
semaphore S_AC = 0; // 描述 A、C 之间的同步关系
semaphore S_CE = 0; // 描述 C、E 之间的同步关系
T1: T2:
A; B;
signal(S_AC); wait(S_AC);
wait(S_CE); C;
E; signal(S_CE);
F; D;