全球旧事资料 分类
允许时,释放第一个写者操作。r
r
r
r
读者优先:r
r
如果没有写者正在操作,则读者不需要等待,用一个整型变量readcou
t记录当前的读者数目,用于确定是否释放写者线程,(当readcout0时,说明所有的读者都已经读完,释放一个写者线程),每个读者开始读之前都要修改readcou
t为了互斥的实现对readcou
t的修改,需要一个互斥对象Mutex来实现互斥。r
r
另外,为了实现写写互斥,需要一个临界区对象write当写者发出写的请求时,必须先得到临界区对象的所有权。通过这种方法,可以实现读写互斥,当readcou
t1时,(即第一个读者的到来时,),读者线程也必须申请临界区对象的所有权r
r
当读者拥有临界区的所有权,写者都阻塞在临界区对象write上。当写者拥有临界区对象所有权时,第一个判断完readcou
t1后,其余的读者由于等待对readcou
t的判断,阻塞在Mutex上!r
r
r
r
写者优先:r
r
写者优先和读者优先有相同之处,不同的地方在:一旦有一个写者到来时,应该尽快让写者进行写,如果有一个写者在等待,则新到的读者操作不能读操作,为此添加一个整型变量writecou
t记录写者的数目,当writecou
t0时才可以释放读者进行读操作!r
r
为了实现对全局变量writecou
t的互斥访问,设置了一个互斥对象Mutex3。r
r
为了实现写者优先,设置一个临界区对象read当有写者在写或等待时,读者必须阻塞在临界区对象read上。r
r
读者除了要一个全局变量readcou
t实现操作上的互斥外,还需要一个互斥对象对阻塞在read这一个过程实现互斥,这两个互斥对象分别为mutex1和mutex2。r
r
r
r
r
r
所用的API参数略(MSDN查看)代码中有部分没有使用,但是可以在其他地方自己设计程序的时候使用。r
r
1CreateThread;r
r
2ExitThreadr
r
3Sleepr
r
4CreateMutexr
r
5ReleaseMutexr
r
6WaitForSi
gleObjectr
r
7WaitForMutipleObjectsr
r
8CreateSemaporer
r
9ReleaseSemaporer
r
10I
itializeCriticalSectio
r
r
11E
terCriticalSectio
r
r
12LeaveCriticalSectio
r
r
r
r
原代码文件名:r
r
1ReaderA
dWriterCPP具体的实现r
r
2threaddat辅助的文件,但是必不可以少。r
r
r
r
r
r
第三部分:代码r
r
一.ReaderA
dWriterCPP文件的具体内容:r
r
来自wi
dows内核实验教程r
r
机械工业出版社r
r
ISBN7111108809TP2600r
r
制作者yuheju
126comr
r
Formorei
formatio
wwwsurstarcomr
r
2005119r
r
beiji
gcha
gpi
gr
r
DebugVisio
r
r
Descriptio
这是一个关于操作系统内核实验的一段程序读者和写者的问题的模拟实现r
r
开发环境WINXPVC6Co
soler
好听全球资料 返回顶部