进程管理四经典进程同步问题概要.ppt

* Swait(S1, S2, …, Sn) //P原语; { while (TRUE) { if (S1 =1 S2 = 1 … Sn = 1) { //满足资源要求时的处理; for (i = 1; i = n; ++i) --Si; //注:与wait的处理不同,这里是在确信可满足 //资源要求时,才进行减1操作; break; } else { //某些资源不够时的处理; 调用进程进入第一个小于1信号量的等待队列Sj.L; 阻塞调用进程; 将调用进程的PC置为swait操作开头 } } } * Ssignal(S1, S2, …, Sn) { for (i = 1; i = n; ++i) { ++Si; //释放占用的资源; for (each process P waiting in Si.L) //检查每种资源的等待队列的所有进程; { 从等待队列Si.L中取出进程P; 进程P进入就绪队列; } } } } 需要注意: 原先处于阻塞状态的进程,被唤醒后,从何处开始执行? 与 记录型信号量机制有何不同?

文档评论(0)

1亿VIP精品文档

相关文档