读者写者问题(读者优先 写者优先 读写公平)

Posted wwqdata

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读者写者问题(读者优先 写者优先 读写公平)相关的知识,希望对你有一定的参考价值。

无论是三种中的哪一种,在没有程序占用临界区时,读者与写者之间的竞争都是公平的,所谓的不公平(优先)是在读者优先和写者优先中,优先方只要占有了临界区,那么之后所有优先方的程序(读者或写者)便占有了临界区的主导权,除非没有优先方程序提出要求,否则始终是优先方的程序占有临界区,反观非优先方即使某一次占有了临界区,那么释放过后,回到了没有程序占有临界区的情况,非优先方又要重新和优先方公平竞争,所谓的优先可以理解为优先方在占有临界区后便可以对临界区进行"垄断"

在读者优先中,当读者在里面占用文件的时候,外边的读者可以直接读取文件。在写者优先中,每个写者操作文件以后会优先叫醒等待的写者。 就像是我们上课占座,自己的同学上完第一节课可以直接把座位让给我们。

读者优先

即使写者发出了请求写的信号,但是只要还有读者在读取内容,就还允许其他读者继续读取内容,直到所有读者结束读取,才真正开始写

1.有读者在读后面来的读者可以直接进入临界区,而已经在等待的写者继续等待直到没有任何一个读者时。

2.读者之间不互斥,写者之间互斥,只能一个写,可以多个读,

3.读者写者之间互斥,有写者写则不能有读者读
4.如果在读访问非常频繁的场合,有可能造成写进程一直无法访问文件的局面

写者优先

 如果有写者申请写文件,在申请之前已经开始读取文件的可以继续读取,但是如果再有读者申请读取文件,则不能够读取,只有在所有的写者写完之后才可以读取

1.写者线程的优先级高于读者线程。

2.当有写者到来时应该阻塞读者线程的队列。
3.当有一个写者正在写时或在阻塞队列时应当阻塞读者进程的读操作,直到所有写者进程完成写操作时放开读者进程。
4.当没有写者进程时读者进程应该能够同时读取文件。

读写公平:
1.优先级相同。
2.写者、读者互斥访问。
3.只能有一个写者访问临界区。
4.可以有多个读者同时访问临界资源。

读者写者在访问文件之前都得排队等待。
基本的实现:对于读者和写者在P、V操作上基本相同,都是先等待queue信号量,然后再等待rw。
稍微不同的是由于读者可以同时访问文件,若有读者已经在访问文件,其他的读者不用在申请rw信号量。

代码可参考     https://blog.csdn.net/william_munch/article/details/84256690

以上是关于读者写者问题(读者优先 写者优先 读写公平)的主要内容,如果未能解决你的问题,请参考以下文章

操作系统——读者写者问题(读者优先强写者优先 和 公平竞争)

信号量解决写者优先&读者优先&公平竞争(reader writer)

操作系统-进程PV操作——读者写者问题

用信号量和读写锁解决读者写者问题

燕山大学操作系统作业——读者-写者公平问题

燕山大学操作系统作业——读者-写者公平问题