algorithm - 强信号量队列纪律和饥饿

标签 algorithm queue semaphore

在 William Stallings 的操作系统一书中,他将强信号量定义为具有 FIFO 队列规则的信号量,而将弱信号量定义为无序的信号量。强信号量当然还有其他排队规则,例如优先级?或者这不再是一个强大的信号量,因为饥饿可能成为可能? (Stallings 说强信号量不允许饥饿。)强信号量和弱信号量之间的主要区别是有序/无序,还是饥饿可能/不可能?

最佳答案

是的,一种非 FIFO 非饥饿的可能性(在许多可能性中)是以循环方式选择下一个进程。例如,如果顺序是 1、2、3、4,当 1 持有信号量时,4 然后 3 请求它,那么下一个进程就是 3。没有进程 P 饿死,因为在 P 的每次请求之后,在 P 的请求被授予之前,每个其他进程最多有一个关键部分。

Google 搜索结果第一页中“强信号量”的定义分为“不饥饿”和“先进先出”。哪一个是“正确的”是一个品味问题——鉴于这种困惑(以及在数学写作中普遍过度使用 strong 作为形容词),我可能两者都不会使用。

关于algorithm - 强信号量队列纪律和饥饿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8021504/

相关文章:

ajax - 如何在 Web 应用程序中对用户进行排队?

multithreading - 信号量P和V操作是原子的吗?

c# - 在方法中使用SemaphoreSlim而不进行异常处理

C++ 排序的对象集

c++ - 如何判断一个点是否在矩形内?

Python多处理队列获取和放置

javascript - 为什么 Node 没有检测到我最近创建的文件

c++ - 使用 "Sort K number of elements based array"算法的数组中的第 K 个最大数

algorithm - 猜猜给定随机三元组的字符串

c++ - 使用std::forward_list的队列实现返回错误