死锁免费与饥饿免费

时间:2011-12-03 18:55:37

标签: algorithm concurrency synchronization parallel-processing deadlock

相互排斥算法不会保持无死锁属性,但它能维持饥饿自由吗?

谢谢

2 个答案:

答案 0 :(得分:10)

饥饿自由可以定义为:无论进程 p p 所发出的acquire_mutex()的每次调用最终都会终止。 或者任何试图进入关键部分的过程最终都会进入关键部分。

死锁自由:无论时间 T ,如果 T 之前有一个或多个进程 已经调用了操作acquire_mutex(),但没有一个操作终止它 在 T 时调用,然后有一段时间 T' > T ,调用acquire_mutex()的进程终止其调用。[Raynal,Concurrent Programming:Algorithms,Principles,and Foundations] 或者如果进程正在尝试进入关键部分,那么某个进程(不一定是必需的进程)最终将进入临界区。或至少一个,总是胜利。

请注意,死锁自由是指某些进程会进展,但其他进程可能会陷入困境(挨饿),试图进入关键部分。起初听起来很奇怪,但事实并非如此:并非所有线程都被卡住,因此没有死锁,即死锁自由。

另一方面,饥饿自由是说每个过程试图进入关键部分,最终会这样做。没有任何进程会挨饿。

这使得饥饿自由比死锁自由更强大。

你的问题的答案是否定的。

答案 1 :(得分:4)

不 - 饥饿的每一个合理定义都包含死锁。