返回首页

同步问题的资源共享

(11月15日(晚上),16(日)2011年到期)
假设有多个读者想从数据库中读取,也有多个作家要更新数据库。虽然许多读者可以同时从数据库中读取,但是当一个作家更新的数据库,没有其他的作家和任何读者应该被允许访问数据库。也就是说,基本上是同步的读者和作家互斥问题,如下所示:


这也被称为读/写问题。

在这一领域的研究人员一直在使用这个问题,作为一个测试案例来研究不同的策略解决共享资源的同步问题。的策略是:

读者偏好:

这是一个新的读者和新作家加入系统时,读者进程给予更高的优先级来访问数据库。

以下三个策略是基于以下情况:

还有的读者和作家的等待队列在读者和作家队列,一个作家是更新数据库。作家一旦完成更新数据库,接下来的问题是:哪个进程应给予对数据库的访问

强大的读者偏好:

在这一战略中,所有的等待读者进程应允许访问过的所有等待的作家进程的数据库。此外,如果一个新的读者进程和新作家的过程,加入该系统,读者的过程应该被允许加入其他读者立即读取数据库,同时到达的作家进程进入作家排队等待对数据库的访问。

弱读者偏好:

在这一战略中,我们不明确地选择读者的过程,但我们未来的过程中随机选择的读者和作家之间的。

较弱的读者偏好:

在这一战略中,我们给出一个等待作家进程更高的优先级比等待的读者进程。

项目:

&# 160; 在这个项目中,您将使用"弱读者偏好"的解决方案来解决读/写的问题。你的程序将是一个多线程的Java程序,即,每一位读者和作家的过程中,将作为一个单独的Java线程实现。你应该使用同步信号/监视器。

假设:有5最多读者和作家的过程。该数据库是整数缓冲区大小1.That的是

  ; INT BUF = 0; / /数据库,初始值0
INT缓冲区
 60; 作家应该产生一个正整数的值小于10,并将其写入到数据库中。

要求:

应该接受你的程序在命令行中的参数数量的读者和作家的数量。
你的程序的名称应该是RW.java。
因此,运行系统的命​​令将
GT; JAVA刻录LT#readersgt; LT#writersgt;

读者进程应给予字符的名称,A,B,C,D E.
作家进程应给予字符名楼G,H,我研究
除了阅读和写作,线程应该睡了一随机量的时间(0到1000ms),以模拟真实的情况。
你的程序应该反映读者的并发行为。为此,读者应该打印出读者计数的值(即目前读取数据库的读者数量)如下所示。为了使这种行为更加清晰,便于观察,你可能想后的读者数量递增,但在此之前递减,使你的读者线程睡眠。
该项目的一个范例输出如下:
---- jGRASP EXEC:JAVA ReaderWriter的2 1

开始...

-GT;作家F置缓冲区0
-GT;#读者阅读的DB = 1读卡器检索到0
-GT;#读者正在阅读的DB = 1读卡器乙检索0

---- jGRASP:操作完成
。__________________________________________________________
---- jGRASP EXEC:JAVA ReaderWriter的2 1

开始...

-GT;作家F置缓冲区1
-GT;#读者正在阅读的DB = 2阅读器乙检索1
-GT;#读者正在阅读的DB = 1读者检索1

---- jGRASP:操作完成
。____________________________________________________
"---- jGRASP EXEC:JAVA ReaderWriter 3 2

开始...

-GT;作家F置缓冲区7
-GT;作家Ğ集缓冲区9
-GT;#读者正在阅读的DB = 1读者检索9
-GT;#目前阅读的DB = 2阅读器乙读者检索9
-GT;#目前阅读DB = 1读卡器Ç读者检索9

---- jGRASP:操作完成
。__________________________________________________________
"---- jGRASP EXEC:JAVA ReaderWriter 4 2

开始...

-GT;作家F置缓冲区9
-GT;作家Ğ设置缓冲区0
-GT;#读者正在阅读的DB = 2阅读器乙检索0
-GT;#读者阅读的DB = 1读卡器检索到0
-GT;#DB = 1读卡器ð目前阅读的读者检索0
-GT;#目前阅读DB = 1读卡器Ç读者检索0

---- jGRASP:操作完成


提示:看看这个演示和代码片断。类的例子

回答

评论会员:理查德MacCutchan 时间:2012/02/06
提示:我们不为你做你的功课
评论会员:游客 时间:2012/02/06
|纳吉Vilmos:我为你做的基础,只是填补空白:codeprelang="java"spanclass="code-keyword"package/spanhomework.readwrite; spanclass="code-keyword"public/spanspanclass="code-keyword"class/spanReadWriteApp{ spanclass="code-keyword"public/spanspanclass="code-keyword"void/spanmain(String[]args){spanclass="code-comment"///spanspanclass="code-comment"codegoeshere/span}}/pre/code