第4章进程同步与死锁.ppt
文本预览下载声明
第四章 进程同步与死锁;;4.1 进程同步的基本概念;4.1.1 并发性;4.1.2 与时间有关的错误;4.1.3 进程的同步与互斥;4.1.4 临界资源和临界区;;;4.2 互斥实现方法;4.2.1 硬件方法;;4.2.2 软件方法;;4.3 信号量;4.3 信号量;4.3.1整型信号量机制;4.3.2记录型信号量机制;4.3.3 AND型信号量机制;SP(x1,x2,…,xn)
{
if(x1=0x2=0…xn=0)
{
for(i=0;in;++i)
xi=xi-1;
}
else
{
在队列中阻塞;
}
}
?
SV(x1,x2,…,xn)
{
for(i=0;in;++i)
{
xi=xi+1;
唤醒队列中的进程;
}
};4.4 经典的进程同步问题;4.4.1 生产者-消费者问题;4.4.2 读者-写者问题;4.4.3 哲学家进餐问题;设定哲学家的编号依次为0到4,用数组State来表明哲学家所处的状态,例如若State[3]==EATING,那么就表明3号哲学家处于就餐状态。为了方便获得某哲学家左右两边哲学家的编号,定义如下两个宏:
#define LEFT(x) (x-1)%5
#define RIGHT(x) (x+1)%5
定义一个信号量数组s,对应每个哲学家,初值为0,用来在得不到筷子是阻塞哲学家。为保证各哲学家状态的变更和测试能够互斥的进行,定义信号量mutex,初值为1。
;4.4.4 打瞌睡的理发师问题;4.5 管程;4.5.1 使用信号的管程;4.5.1 使用信号的管程;4.5.1 使用信号的管程;4.5.1 使用信号的管程;4.5.2 使用通知和广播的管程;两个进程分别准备打印一个非常大的磁带文件。进程A申请打印机,并得到授权。进程B申请磁带机,也得到授权。现在,A申请磁带机,但该请求在B释放磁带机前会被拒绝。然而,B非但不放弃磁带机,反而去申请打印机,而A在申请到磁带机之前也不会释放打印机。这时,两个进程都被阻塞,并且保持下去,这种状况就是死锁(deadlock)。;4.6.1 死锁的概念;4.6.1 死锁的概念;4.6.2 死锁的处理策略;4.6.3 死锁的预防与避免;4.6.3 死锁的预防与避免;4.6.4 死锁的检测与恢复;4.6.4 死锁的检测与恢复;4.6.4 死锁的检测与恢复
显示全部