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