同步
同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
进程间的直接制约关系就是源于它们之间的相互合作。例如:上面两个程序可以看成5+3*5中的加法程序和乘法程序。若先执行乘法程序再执行加法程序,则5+3*5=20。这个答案一定是对的吗?其实不然。如果我们想要的答案是40,就要先执行加法程序再执行乘法程序,(5+3)*5=40。我们通过加 () 改变了运算的先后顺序,使先乘除后加减变成了先加减后乘除,这就是一种同步机制。
互斥
互斥亦称间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。
例如,在仅有一台打印机的系统中,有两个进程A和进程B,如果进程A需要打印时,系统已将打印机分配给进程B,则进程A必须阻塞。一旦进程B将打印机释放,系统便将进程A唤醒,并将其由阻塞状态变为就绪状态。为禁止两个进程同时进入临界区,同步机制应遵循以下准则:
空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。
忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待。
有限等待:对请求访问的进程,应保证能在有限时间内进入临界区。
让权等待:当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。