·概述
并发包括很多设计问题,其中有通信、资源共享和竞争、多个进程活动的同步以及分配给进程的处理器时间等。
并发会在以下三种不同的上下文中出现:多个应用程序,结构化应用程序,操作系统结构。
与并发相关的关键术语
·进程的交互
进程间的资源竞争
当并发进程竞争使用同一资源时,它们之间会发生冲突。
竞争进程面临三个控制问题:
1.
互斥:竞争进程仅可以访问一个临界资源(一次仅有一个进程可以访问临界资源),并发机制必须满足一次只有一个进程可以访问临界资源这个规则。
2.死锁:如果竞争进程需要唯一的访问多于一个资源,并且当一个进程控制着一个进程,且在等待另一个进程,死锁可能发生。
3.饥饿:一组进程的一个可能会无限期地拒绝进入到一个需要资源,因为其他
成员组成垄断这个资源。
进程间通过共享合作
多个进程可能访问一个共享变量、共享文件或数据库,进程可能使用并修改共享变量而并不涉及其他进程,但却知道其他进程也可能访问同一个数据。因此,这些进程必须合作,以确保它们共享的数据得到正确的管理。
进程间通过通信合作
当进程通过通信进行合作时,各个进程都与其他进程进行连接,通信提供了同步和协调各种活动的方法。
·互斥的要求
1.必须强制实施互斥:在具有关于相同资源或共享对象的临界区的所有进程中,一次只允许一个进程进入临界区。
2.一个在临界区停止的进程必须不干涉其他进程。
3.绝不允许出现一个需要访问临界区的进程被无限延迟的情况,即不会饿死或饥饿。
4.当没有进程在临界区中时,任何需要进入临界区的进程必须能够立即进入。
5.对相关进程的速度和处理器的数目没有任何要求和限制。
6.一个进程驻留在临界区中的时间是有限的。
·信号量
常用并发机制
信号量的操作:
1)一个信号量可以初始化为非负数。
2)semWait操作使信号量减1。如果值<0,则该进程被阻塞。否则继续执行。
3)semSingnal操作使信号量加1。如果值<=0,则唤醒队列中的一个进程。否则继续执行。
进程按照什么顺序从队列中移除?
最公平的策略是先进先出(FIFO),采用该策略的信号量称为
强信号量。
没有规定进程从队列中移除顺序的信号量称为
弱信号量。
使用信号量实现互斥
·管程
管程是由一个或多个过程、一个初始化序列和局部数据组成的软件模块。
管程的结构