阻碍自由是否意味着饥饿自由?

时间:2016-07-04 18:02:36

标签: multithreading nonblocking

如果线程在隔离状态下运行足够长时间,然后在有限步骤中完成该方法,则该方法是无障碍的。而方法的饥饿自由确保调用该方法的所有线程最终将在有限步骤中完成,并且所有线程都有系统范围的进展。

现在,如果所有无阻塞方法在隔离状态下运行的时间足够长,它们将完成并确保所有线程的进度。另外需要注意的是,无障碍和饥饿自由都是依赖条件,即确保OS调度程序是公平的。

所以我觉得阻碍自由意味着饥饿自由。唯一的区别是已经为非阻塞算法定义了无障碍条件。另一方面,无饥饿条件用于阻塞算法。这是对的吗?

1 个答案:

答案 0 :(得分:1)

  

现在,如果所有无障碍方法都隔离运行的时间足够长,它们就会完成,这可以确保所有线程的进展。

这是一个很大的" if"。

  

另外需要注意的是,无障碍和饥饿自由都是依赖条件,即确保OS调度程序是公平的。

我不明白你的意思(或许他们要求调度程序是公平的;阻碍自由并不能确保它。但我不相信这是准确的。障碍自由并不要求调度程序公平。

  

所以我觉得阻碍自由意味着饥饿自由

不,因为无法保证无障碍方法单独运行;这将要求所有其他进程停止,这要求他们要么取得进步并完成,要么被迫挨饿。如果保证他们可以取得进步,那么你至少拥有锁定自由。

有关细分,请参阅Wikipedia entry on non-blocking algorithms。障碍自由是最弱自然无阻碍进步保证" (强调我的)。这意味着饥饿自由(仅由等待自由暗示)是更强的保证。饥饿自由意味着阻碍自由,而不是相反。