竞争条件,关键部分和信号量是操作系统的关键部分。有关这些的详细信息如下-
竞态条件是可能在关键区域内发生的情况。当关键部分中多个线程执行的结果根据线程执行的顺序而不同时,会发生这种情况。
如果将关键部分视为原子指令,则可以避免关键部分的竞争条件。同样,使用锁或原子变量进行正确的线程同步也可以防止出现竞争情况。
可以访问共享变量的代码段中的关键部分。在关键部分需要原子动作,即一次只能在其关键部分执行一个过程。所有其他进程都必须等待在其关键部分执行。
关键部分如下:
do{ Entry Section Critical Section Exit Section Remainder Section } while (TRUE);
在上图中,输入部分处理了进入关键部分的操作。它获取流程执行所需的资源。退出部分处理关键部分的退出。它释放资源,并通知其他进程关键部分是免费的。
关键部分问题需要一个解决方案来同步不同的过程。关键截面问题的解决方案必须满足以下条件-
互斥
互斥意味着任何时候都只能在关键部分内进行一个过程。如果任何其他进程需要关键部分,则它们必须等待,直到其空闲为止。
进展小号
进度表示,如果某个进程未使用关键部分,则它不应阻止任何其他进程访问它。换句话说,任何进程都可以进入关键部分(如果空闲的话)。
有界等待小号
有界的等待意味着每个进程必须有有限的等待时间。它不应无休止地等待访问关键部分。
信号量是一种信号传递机制,正在等待信号量的线程可以由另一个线程发出信号。这与互斥锁不同,因为互斥锁只能由调用等待功能的线程发出信号。
信号量使用两个原子操作,即等待和信号进行过程同步。
如果为正数,则等待操作会减小其参数S的值。如果S为负或零,则不执行任何操作。
wait(S){ while (S<=0); S--; }
信号运算会增加其参数S的值。
signal(S){ S++; }