现有5个操作A、B、C、D和E,操作C必须在A和B完成后执行,操作E必须在C和D完成后执行,请使用信号量的wait()、signal()操作(P、V操作)描述上述操作之间的同步关系,并说明所用信号量及其初值。
解答:
列出前置关系:
用户登录可进行刷题及查看答案
可以画出AOV网:
进行拓扑排序:
A,B,C,D,E
每个同步关系一个信号量,即每个AOV网中每条有向边(表示一个同步关系)构造一个信号量,默认初始为0。
semaphore S_AC = 0; //控制操作A和C的执行顺序 semaphore S_BC = 0; //控制操作B和C的执行顺序 semaphore S_CE = 0; //控制操作C和E的执行顺序 semaphore S_DE = 0; //控制操作D和E的执行顺序 cobegin Process A() { 完成操作A; signal(S_AC); // V(S_AC); } Process B() { 完成操作B; signal(S_BC); // V(S_BC); } Process C() { wait(S_AC); // P(S_AC); wait(S_BC); // P(S_BC); 完成操作C; signal(S_CE); // V(S_CE); } Process D() { 完成操作D; signal(S_DE); // V(S_DE); } Process E() { wait(S_CE); // P(S_CE); wait(S_DE); // P(S_DE); 完成操作E; } coend
登录后提交答案
暂无评论,来抢沙发