有3个进程P1、P2和P3并发执行,P1进程需要使用互斥资源S3和S1,P2进程需要使用互斥资源S1和S2,P3进程需要使用互斥资源S2和S1,请问:
(1)若对资源分配不加限制,会发生什么情况?为什么?
(2)为保证进程能执行到结束,应采用怎样的资源分配策略?
有3个进程P1、P2和P3并发执行,P1进程需要使用互斥资源S3和S1,P2进程需要使用互斥资源S1和S2,P3进程需要使用互斥资源S2和S1,请问:
(1)若对资源分配不加限制,会发生什么情况?为什么?
(2)为保证进程能执行到结束,应采用怎样的资源分配策略?
【正确答案】:三个进程资源分配: (1)若对资源分配不加限制,譬如: Begin CoBegin process P1: [……] process P2: [ P(S1); P(S2); …… V(S1); V(S2);] process P3: [ P(S2); P(S1); V(S2); V(S1);] coend; end; 显然,当P2执行完“P(S1)”时,P3执行了“P(S2)”之后,P2、P3两个进程就陷人了死锁状态(P2占用S1,同时申请使用S2,而P3占用S2,同时申请使用S1,两者构成了死锁)。 这样,P2、P3两个进程陷入了死锁状态,P1进程也可能处于这个死锁状态中。 (2)为保证进程能执行到结束,可以规定: ①一个进程申请资源时,若它已占有其他资源,必须首先释放这个资源才可以申请; ②静态分配资源,即进程在全部获得资源后,才能执行,只要有一个资源不能满足,系统就不分配任何资源给该进程使其等待; ③上面①和②是破坏“占有并等待”条件防止死锁的,也可以采用破坏“循环等待”条件防止死锁,可以规定三个进程正在申请资源,按S1、S2、S3的次序顺序申请,即P1按S1→→S3的顺序、P2按S1→S2的顺序、P3按S1一S3的顺序进行申请。
Top