我不理解作者在这两种情况下想要表达什么意思。能否给我提供一个相关定义的恰当例子来帮助我理解?
谢谢。
首先,让我介绍一些术语。临界区(CS)是一段只能由一个进程执行的指令序列。在使用临界区时,代码可以被分解成以下几个部分:
// Some arbitrary code (such as initialization).
EnterCriticalSection(cs);
// The code that constitutes the CS.
// Only one process can be executing this code at the same time.
LeaveCriticalSection(cs);
// Some arbitrary code. This is called the remainder section.
由于至少有一个进程希望进入其临界区,因此我们必须选择其中一个进程进入其临界区。但是谁来做出这个决定呢?那些已经请求进入其临界区的进程有权参与做出这个决定。此外,那些可能希望进入其临界区但尚未请求许可(这意味着它们正在第一部分执行)的进程也有权参与做出这个决定。
而且这个选择不能无限期地推迟。
这说明选择进程进入其临界区需要一定的时间。特别地,不会发生死锁或活锁。因此,在这有限的时间后,一个进程将进入其临界区并进行一些工作,从而取得进展。
现在我将解释最后一个条件,即有界等待。此条件的目的是确保每个进程都有机会实际进入其关键部分,以便没有进程永久饥饿。但请注意,既不是这个条件,也不是进展保证公平性。 CS的实现不一定是公平的。让我们逐句理解这个定义,从最后一句开始。有界等待:在一个进程请求进入其关键部分并且在该请求被授予之前,在其他进程被允许进入其关键部分的次数上存在一个限制或限制。
换句话说,如果有一个进程请求进入其CS但还没有进入它。 让我们称这个进程为P。在一个进程请求进入其关键部分并且在该请求被授予之前。
当P等待进入其临界区时,其他进程也可能在等待,某些进程正在其临界区中执行。当它离开其临界区时,必须选择另一个进程进入临界区,这个进程可能是P,也可能不是P。假设选择了除P以外的进程。这种情况可能一次又一次地发生。也就是说,其他进程有机会进入其临界区,但从未是P。请注意,正在取得进展,但是由其他进程而非P完成。问题在于P没有获得任何工作机会。为防止饥饿,必须保证P最终将进入其临界区。为此,必须限制其他进程进入其临界区的次数。在这种情况下,P肯定会有机会进入其临界区。在其他进程被允许进入其关键部分的次数上存在一个限制或限制。
总的来说,解决关键段问题的方案必须满足三个条件:
互斥性:每个进程对共享内存的访问是互斥的。在任何时刻只能有一个进程处于其关键段。
进展性:如果没有进程处于其关键段,并且有一个或多个线程想要执行其关键段,则这些线程中的任何一个都必须被允许进入其关键段。
有界等待:在进程请求进入其关键段后,有一定数量的其他进程可以进入其关键段之前,该进程的请求将被授予。因此,在达到限制后,系统必须授予进程权限进入其关键段。这个条件的目的是确保每个进程都有机会进入其关键段,以便没有进程永远挨饿。
如何判断同步解决方案是否正确
1). 互斥性:在任意时间点,临界区域内只能有一个进程。
2). 进度:如果一个进程不想进入临界区域,则它不应该阻止其他进程进入其临界区域。如果一个进程成功地阻止了其他有兴趣的进程,则不能保证进度;否则,可以保证进度。临界区域应该是空闲的。
3). 有界等待:在临界区域外等待的进程应该有限制的等待时间。
4). 架构中立:不对硬件做任何假设。
(简单定义)
有界等待:每次只有一个进程获得进入临界区的机会,而其他进程也有兴趣进入临界区。