种族状况,临界区和信号灯

竞争条件,关键部分和信号量是操作系统的关键部分。有关这些的详细信息如下-

比赛条件

竞态条件是可能在关键区域内发生的情况。当关键部分中多个线程执行的结果根据线程执行的顺序而不同时,会发生这种情况。

如果将关键部分视为原子指令,则可以避免关键部分的竞争条件。同样,使用锁或原子变量进行正确的线程同步也可以防止出现竞争情况。

临界区

可以访问共享变量的代码段中的关键部分。在关键部分需要原子动作,即一次只能在其关键部分执行一个过程。所有其他进程都必须等待在其关键部分执行。

关键部分如下:

do{
   Entry Section
   Critical Section
   Exit Section
   Remainder Section
} while (TRUE);

在上图中,输入部分处理了进入关键部分的操作。它获取流程执行所需的资源。退出部分处理关键部分的退出。它释放资源,并通知其他进程关键部分是免费的。

关键部分问题需要一个解决方案来同步不同的过程。关键截面问题的解决方案必须满足以下条件-

  • 互斥

    互斥意味着任何时候都只能在关键部分内进行一个过程。如果任何其他进程需要关键部分,则它们必须等待,直到其空闲为止。

  • 进展小号

    进度表示,如果某个进程未使用关键部分,则它不应阻止任何其他进程访问它。换句话说,任何进程都可以进入关键部分(如果空闲的话)。

  • 有界等待小号

    有界的等待意味着每个进程必须有有限的等待时间。它不应无休止地等待访问关键部分。

信号

信号量是一种信号传递机制,正在等待信号量的线程可以由另一个线程发出信号。这与互斥锁不同,因为互斥锁只能由调用等待功能的线程发出信号。

信号量使用两个原子操作,即等待和信号进行过程同步。

如果为正数,则等待操作会减小其参数S的值。如果S为负或零,则不执行任何操作。

wait(S){
   while (S<=0);
   S--;
}

信号运算会增加其参数S的值。

signal(S){
   S++;
}