变形的读者-写者进程同步问题.docVIP

  • 7
  • 0
  • 约4千字
  • 约 8页
  • 2018-10-11 发布于重庆
  • 举报
变形的读者-写者进程同步问题

变形的读者-写者进程同步问题 第24卷第17期 2008年9月 甘肃科技 GansuScienceandTechnolo 2_24 See. Ⅳo.17 2oo8 变形的读者一写者进程同步问题 李广军,荆天 (1.商丘师范学院计算机科学系,河南商丘476000;2.商丘师范学院数学系,河南商丘476000) 摘要:读者一写者问题是操作系统中经典进程同步问题之一,在传统解决读者写者问题方案的基础上,给出了两 种变形读者写者问题的解决方案和算法. 关键词:进程;互斥;信号量 中图分类号:TP139 利用记录型信号量机制来实现读者与写者的同 步问题,一直是操作系统中讨论的经典进程同步热 点问题,而且由它引出的一系列变异问题,如:不同 类型的读者,不同类型的写者等问题也都是很典型 的进程同步问题.这类题型变化多,实例多,又与实 际生活中的问题有着紧密联系.本文利用记录型信 号量机制,对两种变形读者一写者问题进行了分析, 同时给出了具体的解决方案和算法. 1传统读者一写者问题及解决方案 1.1传统问题内容 某共享文件,多个读者(只读文件进程)和多个 写者(只写文件进程)在某个时间段内对该文件资 源异步进行读写.为避免文件数据出现丢失修改和 读脏数据的情况,对读者写者要求如下: (1)读一读共享,即允许多个读者同时对文件 进行读操作. (2)读一写互斥,即不允许读者和写者同时对 文件分别进行读写操作. (3)写一写互斥,即不允许多个写者同时对文 件进行写操作. 1.2传统解决方案 解决方案和具体算法的内容,请参考汤子瀛西 安电子科技大学出版社的计算机操作系统(修订 版)P49的描述. 2两种变形的读者一写者问题 2.1两组不同类型写者的读者一写者问题 问题内容: 两组不同类型的多个写者共享一个文件,要求 写与写是互斥即无论是否为同一组都不能同时写操 作共享文件.但如果某组中有一写者正在对文件操 作时,该的后续写具有比另外一组的后续写者优先 操作权. 解决方案: 在写者优先的读者一写者问题的方案的基础 上,为两组读者分别引入整型量writerlcount和 writer2count,来记录各组当前正在运行的写者进程 数量.同时要注意的是Writerlcount和Writer2count 是两个临界资源所以在这里还要分别引人新的互斥 信号量Wclmutext和Wc2mutext. 算法描述: VarRmutex,We1mutext,Wc2mutext,Idmutex, Enmutex:semaphore:=1,1,1,1,1; Readercount,writerlcount,Wfiter2count:integer: =0,0,0; Reader(读者进程) begin repeat wait(Enmutex); wait(Idmutex); wait(Rmutex); ifReadercount:0thenwait(Wmutex); Readercount:=Readercount+1; signal(Rmutex); signal(Idmutex); signal(Enmutex); performreadoperation; wait(Rmutex); Readercount:Readercount一1; ifReadercount=0thensignal(Wmutex); signal(Rmutex); 甘肃科技第24卷 untilfalse; end writerl(第一组写者进程) begin repeat wait(Wc1mutex) ifwriterlcount=0thenwait(Idmutex);/$是 否为该组的第一写者/ writer1count:=writerlcount+1: signal(Wclmutex); wait(Wmutex); performwriteoperation; signal(Wmutex); wait(Wc1mutex) writerlcount:writerlcount一1; ifwriterlcount=0thensignal(Idmutex);/女 是否为该组的最后一写者/ signal(We1mutex); untilfalse; end writer2(第二组写者进程) begin repeat wait(Wc2mutex) ifwriter2count=0thenwait(Idmutex);/是 否为该组的第一写者/ writer2count:=writer2count+1: signal(Wc2mutex); wait(Wmutex); performwriteoperation; signal(Wmutex); wait(Wc2mutex) writer2count:=w

文档评论(0)

1亿VIP精品文档

相关文档