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

有4个进程P1、P2、P3、P4。要求P1必须在P2、P3开始前 完成,P2、P3必须在P4开始前完成,且P2和P3不能并发执 行。

慕田峪4524236
浏览 375回答 2
2回答

慕田峪7331174

这里提供一种使用信号量实现的同步互斥算法,实现上述要求:// 初始化三个信号量semaphore sem1 = 0;semaphore sem2 = 0;semaphore sem3 = 0;// 进程 P1P(sem1); // P1 等待 sem1 信号量// 执行 P1 的操作V(sem2); // 发送 sem2 信号量,使 P2 可以开始执行// 进程 P2P(sem2); // P2 等待 sem2 信号量// 执行 P2 的操作V(sem3); // 发送 sem3 信号量,使 P3 可以开始执行// 进程 P3P(sem3); // P3 等待 sem3 信号量// 执行 P3 的操作V(sem4); // 发送 sem4 信号量,使 P4 可以开始执行// 进程 P4P(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完成后才能执行。

哔哔one

为了实现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 锁
打开App,查看更多内容
随时随地看视频慕课网APP