相互排斥算法不会保持无死锁属性,但它能维持饥饿自由吗?
谢谢
答案 0 :(得分:10)
饥饿自由可以定义为:无论进程 p , p 所发出的acquire_mutex()
的每次调用最终都会终止。
或者任何试图进入关键部分的过程最终都会进入关键部分。
死锁自由:无论时间 T ,如果 T 之前有一个或多个进程
已经调用了操作acquire_mutex()
,但没有一个操作终止它
在 T 时调用,然后有一段时间 T' > T ,调用acquire_mutex()
的进程终止其调用。[Raynal,Concurrent Programming:Algorithms,Principles,and Foundations]
或者如果进程正在尝试进入关键部分,那么某个进程(不一定是必需的进程)最终将进入临界区。或至少一个,总是胜利。
请注意,死锁自由是指某些进程会进展,但其他进程可能会陷入困境(挨饿),试图进入关键部分。起初听起来很奇怪,但事实并非如此:并非所有线程都被卡住,因此没有死锁,即死锁自由。
另一方面,饥饿自由是说每个过程试图进入关键部分,最终会这样做。没有任何进程会挨饿。
这使得饥饿自由比死锁自由更强大。
你的问题的答案是否定的。
答案 1 :(得分:4)
不 - 饥饿的每一个合理定义都包含死锁。