我正在网上寻找彼得森的算法,我似乎无法区分它是否是抢先式的。

抢先-非自愿调度,操作系统决定何时停止该进程

非抢先-进程完成后自动放弃CPU

c - 彼得森的算法-抢先还是非抢先?-LMLPHP

我觉得peterson的算法似乎不是抢先的,因为没有提到进程的优先级。

那是对的吗?有人可以对此有所启发吗?

最佳答案

彼得森的算法不是抢占式的,也不是非抢占式的。

Preemption是基础操作系统(更确切地说是调度程序)的概念。调度程序的任务是及时(按双关语)将时隙分配给进程。

调度程序可以中断有关等待状态的过程。

但是,向调度程序发送信号是“谨慎”的选择,现在正是利用等待状态让另一个进程运行的好时机。

对于彼得森算法,该信号应位于while循环内。一个简单的sleep就足够了。

Wikipedia还提到:


  while条件即使具有抢占也有效


因此,在开始时总结一下:
彼得森的算法不是抢占式的,也不是非抢占式的。

10-06 12:02