- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
北交大操作系统作业-读者写者问题
写者优先方案:
int readcount, writecount; initial value 0
semaphore mutex_1, mutex_2, mutex_3, w, r ; initial value 1
READER
P mutex_3 ; //是控制读进程的队列的P mutex_3 能执行完后等在这一句的读者最多只有1个。 P r ; // 判断有没有写进程在临界区,有的话等待,没有的话不让新的写进程进来 P mutex_1 ; // mutex 1保证对readcount的互斥访问,防止多个reader对readcount的写操作 readcount : readcount + 1; if readcount 1 then P w ; //第一个读进程需要判断是否有写进程在进行写操作,有的话需要等待,没有的话不让写进程进行新写操作 V mutex_1 ; //结束对readcount的互斥访问
V r ; //归还锁,让写进程可以进临界区
V mutex_3 ;
reading is done
P mutex_1 ;//保证readercount不被多个读操作同时修改 readcount : readcount - 1; if readcount 0 then V w ;//最后一个离开临界区的读进程需要归还锁,让写进程可以进行写操作
V mutex_1 ;结束对readcount的互斥访问
WRITER P mutex_2 ; // mutex_2保证对writecount的互斥访问 writecount : writecount + 1; if writecount 1 then P r ; //第一个写进程需要判断是否有读进程在临界区,有的话需要等待,没有的话不让新的读进程进来 V mutex_2 ;
P w ; //限制同一时刻只能有一个写进程进行写操作 writing is performed
V w ;
P mutex_2 ; // mutex_2保证对writecount的互斥访问 writecount : writecount - 1; if writecount 0 then V r ;//最后一个离开临界区的写进程需要归还锁,让读进程可以进临界区
V mutex_2 ; //结束对writecount的互斥访问 semaphores: no_waiting, no_accessing, counter_mutex initial value is 1 shared variables: nreaders initial value is 0 local variables: prev, current
WRITER: P no_waiting ; // 判断有没有在临界区,有的话等待,没有的话不让新的进程进来 P no_accessing ;判断是否有进程在临界区,有的话需要等待,没有的话不让新的进程进来 V no_waiting ; //先释放锁 no_waiting,使得读写进程可以进入等待队列,等待no_accessing释放 ... write ... V no_accessing ; //当前写进程需要归还锁,让进程可以进临界区
READER: P no_waiting ; 判断有没有写进程在临界区,有的话等待,没有的话不让新的写进程进来 P counter_mutex ;// counter_mutex 保证对nreaders的互斥访问,防止多个reader对nreaders的写操作 prev : nreaders; nreaders : nreaders + 1; V counter_mutex ;结束对counter_mutex的互斥访问 if prev 0 then P no_accessing ;第一个进程需要判断是否有进程在临界区,有的话需要等待,没有的话不让新的进程进来 V no_waiting ; //先归还锁no_waiting,让写进程可以进no_accessing释放 ... read ... P counter_mutex ; //counter_mutex 保证对nreaders的互斥访问 nreaders : nreaders - 1; current : nreaders; V counter_mutex ;对nreaders的互斥访问 if current 0 then V no_accessing ;最后一个离开临界区的进程需要归还锁,让进程可以进临界区
文档评论(0)