网站大量收购独家精品文档,联系QQ:2885784924

操作系统-C语言实现读者写者问题(读者优先).pdf

操作系统-C语言实现读者写者问题(读者优先).pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统-C语⾔实现读者写者问题 (读者优先) 同步互斥问题 - 读者写者问题之读者优先 问题要求: 读者-写者问题的读写操作限制(仅读者优先 写者优先) : 写-写互斥,即不能有两个写者同时进⾏写操作。 读-写互斥,即不能同时有⼀个线程在读,⽽另⼀个线程在写。 读-读允许,即可以有⼀个 多个读者在读。 读者优先的附加限制 :如果⼀个读者申请进⾏读操作时已有另⼀个读者正在进⾏读操作,则该读者可直接开始读操作。 读者优先实现思路 : 读者优先指的是除⾮有写者在写⽂件,否则读者不需要等待。所以可以⽤⼀个整型变量read_count记录当前的读者数 ⽬,⽤于确定是 否需要释放正在等待的写者线程(当read_count=0时,表明所有的读者读完,需要释放写者等待队列中的⼀个写者)。每⼀个读者开始 读⽂件时,必须修改read_count变量。因此需要⼀个互斥对象mutex来实现对全局变量read_count修改时的互斥。 另外,为了实现写-写互斥,需要增加⼀个临界区对象write。当写者发出写请求时,必须申请临界区对象的所有权。通过这种⽅法,也 可以实现读-写互斥,当read_count= 1时(即第⼀个读者到来时),读者线程也必须申请临界区对象的所有权。 当读者拥有临界区的所有权时,写者阻塞在临界区对象write上。当写者拥有临界区的所有权时,第⼀个读者判断 完 “read_count== 1”后阻塞在write上,其余的读者由于等待对read_count的判断,阻塞在mutex上。 实现代码 : /* * 读者优先 */ # include stdio.h # include stdlib.h # include time.h # include sys/types.h # include pthread.h # include semaphore.h # include string.h # include unistd.h //semaphores sem_t wrt, mutex int readCount struct data { int id int opTime int lastTime } //读者 void* Reader(void* param) { int id = ((struct data*)param)-id int lastTime = ((struct data*)param)-lastTime int opTime = ((struct data*)param)-opTime sleep(opTime) printf(Thread %d : waiting to read\n, id) sem_wait(mutex) readCount++ if(readCount == 1) if(readCount == 1) sem_wait(wrt) sem_ post(mutex) printf(Thread %d : start reading\n, id) /* reading is performed */ sleep(lastTime) printf(Thread %d : end reading\n, id) sem_wait(mutex) readCount-- if(readCount == 0) sem_ post(wrt)

文档评论(0)

181****7662 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档