5)管程条件变量的释放处理方式
进程A执行,被阻塞,进入等待队列,切换到进程B,当进程B执行signal操作使进程A可以执行时,有两种方式:一种是等进程B执行完再执行进程A,另一种是立即切换到进程A,等执行完进程A再切换到进程B,执行进程B。
第二种比第一种多了一次切换,所以第一种比较高效,但第二种容易证明其正确性。第一种主要用于真实OS和Java中,第二种主要见于教材中。
四、哲学家就餐问题
方案1:都先拿左边的叉子,再拿右边的叉子,拿不到就等着。当5个哲学家同时拿起左边的叉子时,就会引起死锁。
方案2:某一时间内,只能有一个哲学家在进餐,其他的人都不许拿叉子。结果正确,但是效率低。
方案3:按某一规律(下图是按奇偶数分类)让不同的哲学家先拿不同方向的叉子,即不是都先拿左手的叉子或右手的叉子,而是有的先拿左手的叉子,有的先拿右手的叉子。从而避免方案1中死锁的发生。
五、读者写者问题
|