我在网上找彼得森的算法,我似乎无法区分它是否是抢占式的。
抢占式- 非自愿调度,操作系统决定何时停止进程
非抢占式- 进程完成后自愿放弃 CPU
我觉得彼得森的算法似乎是非抢占式的,因为没有提到进程的优先级。
那是对的吗?有人可以对此有所了解吗?
我在网上找彼得森的算法,我似乎无法区分它是否是抢占式的。
抢占式- 非自愿调度,操作系统决定何时停止进程
非抢占式- 进程完成后自愿放弃 CPU
我觉得彼得森的算法似乎是非抢占式的,因为没有提到进程的优先级。
那是对的吗?有人可以对此有所了解吗?
Peterson 的解决方案适用于先发制人的过程。对于非抢占式进程,它可能会失败。
假设两个进程都希望进入临界区。
do {
flag[0] = 1;
turn = 1;
while(flag[1] && turn == 1);
CS
flag[0] = 0;
RS
} while(1);
do {
flag[1] = 1;
turn = 0;
while(flag[0] && turn == 0);
CS
flag[1] = 0;
RS
} while(1);
如果 turn = 1 进程 0 将处于自旋锁中。它正在浪费 CPU 周期。它被抢占,以便其他进程(即进程 1)获得机会。