协助进程能与系统内的其他执行进程相互影响。共享数据的并发访问可能导致数据的不一致。
多个进程并发访问和操作同一数据并且执行结果与特定访问顺序有关,称为竞争条件。为了防止竞争条件,就需要保证一次只有一个进程可以操作数据。为了做出这些保证,就要求这些进程按一定方式来同步。
6.1 临界区问题
临界区
假设某个系统有n个进程{P0、P1、...、Pn-1},每个进程都有一段代码,称为临界区(critical section)。进程在执行该区时可能修改公共变量等。
该系统的重要特征是,当一个进程在临界区执行时,其他进程不允许在它们的临界区执行。
注意:临界区不是一个公共的程序区,而是每个进程各自独立拥有自己的临界区。
在进入临界区之前,每个进程应请求许可,实现这一请求的代码段称为进入区。临界区之后可以有退出区,其他代码为剩余区。
临界区问题的解决方案应满足以下三条要求:
- 互斥(mutual exclusion):如果进程Pi在其临界区内执行,那么其他进程都不能在其临界区内执行。
- 进步(progress):如果没有进程在其临界区执行,并且有进程需要进入临界区,那么只有那些不在剩余区内执行的进程可以参加选择,以便确定谁能下次进入临界区,而且这种选择不能无限推迟。
- 有限等待(bounded waiting):从一个进程做出进入临界区的请求直到这个请求被允许为止,其他进程允许进入其临界区的次数具有上限。
扫描二维码关注公众号,回复:
8428562 查看本文章