在多重任务的系统,一些异常情况,防止进展的执行进程或螺纹。我会提到这两个进程和线只是作为"过程"。这两个条件是所谓的死锁和活锁。

前者是指进程,这是阻止彼此,因而防止无论是从执行。后者是指进程,防止每一个其他进展,但实际上并不阻止执行。例如,他们可能会不断地造成彼此的回滚交易,既不是永远能够完成它们。

另一种情况被称为资源匮乏,其中的一个或多个有限资源,需要所取得的进展的进程,已经耗尽,由它们并不能恢复,除非该进程取得进展。这也是一个特殊的情况下生活锁。

我想知道是否有任何其他定义,特别是学之一,对于"饥饿"这不限于"资源饥饿".参考文献特别值得欢迎的。

而且,不,这不是家庭作业。:-)

有帮助吗?

解决方案

我不会说的资源,饥饿是一种特殊情况的一个活锁.通常为:

  • 在一个活锁,无线取得进展,但他们继续执行。(在的僵局,他们甚至不保持执行)

  • 当饥饿,一些螺纹(s)做得进展和一些线(s)没有执行。

一个很好的解释: http://docs.oracle.com/javase/tutorial/essential/concurrency/starvelive.html.但我理解的选择的术语可能有所不同。

当涉及到饥饿、定义我听到的是:

假设是,可以指定的一个无限的路径的执行(交错)符合的假设(semaphore义、操作系统的调度程序的行为...)这样的,thread T暂停,等待对一些资源和从未恢复,即使这是可能的无穷多次。然后T被称为挨饿。

但这种做法不匹配。假设两个线程执行的关键部分在一个无限的循环。你的同步码允许第一线进入关键部分每小时一次。是吗饥饿吗?两个线程被允许进展,但第一种是在做的工作令人痛苦地缓慢。

最简单的来源,饥饿是微弱的信号灯。如果您使用的是一个同步的原始(或建筑自己)该行为是类似的,然后将饥饿的结果。

典型的问题,在那里,饥饿是众所周知的:

更多的细节,我衷心地推荐这本小书的信号灯(免费): http://www.greenteapress.com/semaphores/.

你问的是,如果每一个饥饿是造成在等待一些资源。我想说的-是的。

一个线程可以暂停:

(1)在一些阻系统的呼叫等待/获得互斥、信号,有条件的变量;write(),调查()等。

(2)在一些非运作状进行计算。

饥饿在(1)是饿的在资源(互斥、缓冲器等)。

饥饿在(2)是饿的在中央处理器-你能把它作为一个资源。如果发生这种情况,问题是调度程序。

禾田

其他提示

想象一下,你在一个队列是在餐厅,为此,孕妇可优先购买食物。还有的只是一大堆到达所有的时间孕妇。

您很快就会挨饿。 ;)

现在想象你是一个低优先级的进程和孕妇优先级较高的。 =)

其中饥饿或“不定阻塞”谈论优先级调度算法时通常出现的另一个领域。优先级调度算法留下一些低优先级的进程无限期等待的可能性。较高优先级进程的源源不断可以防止以往获得运行低优先级进程。

在优先调度的情况下,溶液是“老化”。老化是逐渐增加的,在该系统等待很长的时间进程的优先级的技术。

饥饿是简单地当一个进程或服务没有被服务,即使当在系统上没有死锁。

这是我刚由只为清楚的目的的例子。

设想一下,控制计算机访问WAN或类似的东西的算法。该算法可以有一个说,一个政策“提供给那些将使用更少的带宽电脑优先通行。”,那将似乎是一个正确的政策,但后来发生了什么,当一台计算机需要访问网络的FTP上传将地方送几个GB。单独使用此政策,该计算机会饿死,因为算法绝不会选择计算机,以后还会有其他的总要求电脑较小的带宽使用率。

这就是所谓的饥饿。

工作也是一种资源的。当在生产者 - 消费者设置的工作分配是不公平的(或理想),某些线程可能得不到足够的工作项,以使他们忙碌所有的时间。

有一个过程并没有得到资源或资源更长的时间。这不是一个僵局,因为一个S过程没有问题运行/。 老化可以被用来解决这个问题,一个老化因子用于每个请求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top