并发程序设计
•顺序程序设计是把一个程序设计成一个顺序执行的程序模块,不同程序也按顺序先后执行。
•特点:顺序性、封闭性、确定性、可再现性
并发程序设计
•把一个具体问题求解设计成若干个可同时执行的程序模块的方法,称为并发程序设计(concurrent programming)
•采用并发程序设计的程序特性:
(1)并发性:多个进程在执行时间上有重叠
(2)共享型:共享某些变量(资源),失去封闭性
(3)交互性:并发程序之间存在制约
竞争与协作
竞争
•竞争关系:系统中的进程竞争资源但不交换信息,是指若干个进程因相互争夺独占型资源时所产生的竞争制约关系。
•资源竞争的两个控制问题:死锁(Deadlock)问题和饥饿(Starvation) 问题
•解决手段:进程互斥
协作关系
•协作关系:进程为完成同一任务需要分工协作,进程间需要交换信息。
•进程之间完成共同任务。并发进程基于某个条件来协调它们的活动,因为需要在某些位置上排定执行的先后次序而等待、传递信号或消息所产生的协作制约关系。
•解决手段:进程同步
•进程互斥与进程同步
•因此,交互的并发进程在执行时必须进行制约,才能保证得到合理的结果
•进程互斥:并发进程之间因相互争夺独占性资源而产生的竞争制约关系
•进程同步:并发进程之间为完成共同任务基于某个条件来协调执行先后关系而产生的协作制约关系
临界区管理
1.临界资源(critical resource) :并发进程中共享变量所代表的资源;一次只能供一个进程使用的资源。
(1)A、B两个进程共用一台打印机;
(2)A、B两个进程共用一个变量X。
2.临界区(critical section):访问临界资源的程序段(代码)。
临界区与互斥
与同一变量有关的临界区分散在各进程的程序段中,而各进程的执行速度不可预知。
如果保证进程在临界区执行时,不让另一个进程进入临界区,即各进程对共享变量的访问是互斥的,就不会造成与时间有关的错误。
临界区的调度原则
一次至多允许一个进程停留在相关的临界区内
一个进程不能无限止地停留在临界区内
一个进程不能无限止地等待进入临界区
实现互斥的最简单方法-关中断
信号量
信号量:一种软件资源、特殊变量(semaphore)
记录型信号量
操作系统中,信号量表示物理资源的实体,它是一个与队列有关的整型变量。
两个分量:一个是信号量的值(整型),另一个是信号量队列的指针,指向等待此信号 量的进程。
信号量的值,系统初始化赋值为非负,正值表示可用资源数,负值表示等待进程数.
PV操作
•信号量的操作:P操作原语和V操作原语(wait()和signal()、up()和down())
•原语:内核中执行时不可被中断的过程
•P(s);将信号量s的值减去1,若结果小于0,则调用P(s)的进程被置成等待信号量s的状态
• V(s):将信号量s的值加1,若结果不大于0,则释放一个等待信号量s的进程