HardBirch

【经典操作系统问题】读者写者问题分析

时间:10-05-22 栏目:系统技术篇 作者:鲁智森也有文化 评论:1 点击: 2,140 次

       哲学家就餐问题对于互斥访问有限资源的竞争问题(如I/O设备)一类的建模过程十分有用。另一个著名的问题是读者-写者问题(Courtois
等人,1971),它为数据库访问建立了一个模型。例如,设想一个飞机订票系统,其中有许多竞争的进程试图读写其中的数据。多个进程同时读数据库是可以接
受的,但如果一个进程正在更新(写)数据库,则所有的其他进程都不能访问该数据库,即使读操作也不行。这里的问题是如何对读者和写者进行编程?图2-47
给出了一种解法。

      在该解法中,第一个读者对信号量db 执行down操作。随后的读者只是递增一个计数器rc。当读者离开时,它们递减这个计数器,而最后一个读者则对信号量执行up,这样就允许一个被阻塞的写者(如果存在的话)可以访问该数据库。

在该解法中,隐含着一个需要注解的条件。假设一个读者正使用数据库,另一个读者来了。同时有两个读者并不存在问题,第二个读者被允许进入。如果有第三个和更多的读者来了也同样允许。

     现在,假设一个写者到来。由于写者的访问是排他的,不能允许写者进入数据库,只能被挂起。只要还有一个读者在活动,就允许后续的读者进来。这种策略
的结果是,如果有一个稳定的读者流存在,那么这些读者将在到达后被允许进入。而写者就始终被挂起,直到没有读者为止。如果来了新的读者,比如,每2秒钟一
个,而每个读者花费5秒钟完成其工作,那么写者就永远没有机会了。

      为了避免这种情形,可以稍微改变一下程序的写法:在一个读者到达,且一个写者在等待时,读者在写者之后被挂起,而不是立即允许进入。用这种方式,在
一个写者到达时如果有正在工作的读者,那么该写者只要等待这个读者完成,而不必等候其后面到来的读者。该解决方案的缺点是,并发度和效率较低。
Courtois等人给出了一个写者优先的解法。

     




声明: 本文由( 鲁智森也有文化 )原创编译,转载请保留链接: 【经典操作系统问题】读者写者问题分析

【经典操作系统问题】读者写者问题分析:目前有1 条留言

  1. 写的很是经典,只是我还没有学相关知识,看起来比较困难

    2011-08-18 10:26 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐