模拟卷 操作系统 临界资源进程和线程 选择题
第 26 题

关于临界区问题(critical section problem)的一个算法(假设只有进程 P0 和 P1 可能会进入该临界区)如下(i 为 0 或 1),该算法( )。

A. 不能保证进程互斥进入临界区,且会出现“饥饿” B. 不能保证进程互斥进入临界区,但不会出现“饥饿” C. 保证进程互斥进入临界区,但会出现“饥饿” D. 保证进程互斥进入临界区,不会出现“饥饿”

临界资源 进程和线程

[tag_link]

正确答案:B

该算法不能保证进程互斥进入临界区。 > 分析两个进程 P0 和 P1 的执行流程:假设初始时共享变量 turn=0,P0 首先执行,检查 turn!=0 为假,跳过 turn=0 的设置,再检查 turn!=0 为假,不跳转,然后设置 turn=1 并进入临界区。 > 此时 P1 也开始执行,检查 turn!=1 为假,跳过 turn=1 的设置,再检查 turn!=1 为假,不跳转,设置 turn=0 并进入临界区。 > 这样,P0 和 P1 同时处于临界区,违反了互斥条件。 >

虽然互斥无法保证,但算法不会导致“饥饿”(即某个进程永远无法进入临界区)。 > 因为每个进程在尝试进入时,都会通过循环检查 turn 是否等于自己的标识 i。 > 无论 turn 初始值如何,进程在执行中总会将 turn 设置为对方或 0,使得另一个进程在后续尝试中能够通过检查并进入临界区。 > 例如,P0 退出临界区时设置 turn=0,之后 P1 尝试时可能先设置 turn=1 再检查通过,从而进入临界区。 > 两个进程在竞争中有机会交替进入,没有进程会被永久阻塞。 >

因此,该算法不能保证互斥,但不会出现饥饿。 >