为了账号安全,请及时绑定邮箱和手机立即绑定

试写出这4个进程的同步互斥算法,求指点哈

试写出这4个进程的同步互斥算法,求指点哈

慕田峪4524236 2023-03-02 19:15:44
有4个进程P1、P2、P3、P4。要求P1必须在P2、P3开始前 完成,P2、P3必须在P4开始前完成,且P2和P3不能并发执 行。
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

这里提供一种使用信号量实现的同步互斥算法,实现上述要求:
// 初始化三个信号量
semaphore sem1 = 0;
semaphore sem2 = 0;
semaphore sem3 = 0;
// 进程 P1
P(sem1); // P1 等待 sem1 信号量
// 执行 P1 的操作
V(sem2); // 发送 sem2 信号量,使 P2 可以开始执行
// 进程 P2
P(sem2); // P2 等待 sem2 信号量
// 执行 P2 的操作
V(sem3); // 发送 sem3 信号量,使 P3 可以开始执行
// 进程 P3
P(sem3); // P3 等待 sem3 信号量
// 执行 P3 的操作
V(sem4); // 发送 sem4 信号量,使 P4 可以开始执行
// 进程 P4
P(sem2); // P4 等待 sem2 信号量
P(sem3); // P4 等待 sem3 信号量
// 执行 P4 的操作
// 初始化信号量
sem1 = 1;
sem2 = 0;
sem3 = 0;
sem4 = 0;
上述算法中,P1、P2、P3、P4 四个进程依次执行,且满足P1必须在P2、P3开始前完成,P2、P3必须在P4开始前完成,且P2和P3不能并发执行的要求。具体实现中,通过使用信号量来协调进程之间的同步和互斥操作。其中,sem1 信号量的初始值为0,表示P1必须等待其他进程完成后才能执行;sem2 和 sem3 信号量的初始值均为0,表示P2和P3必须等待前面的进程执行完毕并发送信号量后才能执行;sem4 信号量的初始值为0,表示P4必须等待P3完成后才能执行。


查看完整回答
反对 回复 2023-03-06
?
哔哔one

TA贡献1854条经验 获得超8个赞

为了实现4个进程P1、P2、P3、P4的同步互斥,可以使用条件变量和互斥量来实现。

1. 初始化一个全局的互斥量mutex,并初始化三个条件变量cond1, cond2, cond3。
2. P1开始时获得mutex锁,然后执行自己的代码;当它执行完毕时,将cond1信号量设置成true;最后释放mutex锁。
3. P2开始时会先检测cond1是否为true;如果不是true则在cond1上wait()直到P1将其标记成true; 如果是true则获得mutex锁并执行自己的代码;当它执行完毕时将cond2信号量标记成true;最后释放mutex锁。
4. P3开始时检测cond2是否为true;如果不是true则在cond2上wait()直到P2将其标记成true;如果是 true 则 获得 mutex 锁并 执 行 自 己 的 代 码 ; 当 它 执 行 完 毕 时 ;将 cond3信号标志位标志位标志位标志位标志位标志位标志位标志位 成 true ; 最 后 释 放 mutex 锁 。
5. P4开始时检测cond3是否为 true;如果不是 true ,则在 cond 3上 wait () 直 到 p 3将其标 记成 true ;如 果 是 true,就 进入 critical section ,然后执行代码逻辑 ; 最后 释 放 mutex 锁

查看完整回答
反对 回复 2023-03-06
  • 2 回答
  • 0 关注
  • 365 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信