我正在阅读akka documentation,现在我在关于非阻止保证的部分。这就是所说的(强调我的):
如果每个呼叫都保证在a中完成,则方法是等待的 有限的步骤。
[...]
因为每个参与者可以在有限数量的步骤之后进展(当时 电话结束), 等待免费方法没有饥饿 。
强调对我来说并不十分清楚。饥饿在文档的早期定义,因为参与者不可能取得进展(有些人是饥饿的)。
现在,如果多个线程调用相同的无等待方法,它们就不能被饿死。是否意味着即使该方法是阻塞且无等待,也不会发生stavation?关于无等待方法,我只是无法准确描述细节?
例如,如果方法调用 阻止I / O 方法,它是否等待?我说不,不是。但是这个怎么样:
public class MyClass{
private static Object mutex = new Object();
private int sharedInt = 0;
public void isItWaitFree(){
synchronized(mutext){
++sharedInt;
}
}
//The rest
}
我说这取决于//The rest
,因为这可能会无限期地涉及mutex
次获取。
真正的无等待方法的例子是什么?
UPD:我认为wiat-freedom方法是使用非阻塞技术的方法,如AtomicXxx
类,或者我们可以保证有限数量的mutex
时间。
答案 0 :(得分:2)
据我所知,wait-freedom不仅是函数/方法的属性,而且还是将要执行的环境。由于“不公平”调度算法可能导致饥饿,因此可以实现等待自由
<强>更新强>
或者,方法的wait-freedom属性/特权可能以某种方式暴露给调度程序,因此它可以单独调度这些任务。