一、什么是读者写者问题
1.什么是读者写者?
一个数据对象若被多个并发进程所共享,且其中一些进程只要求读该数据对象的内容,而另一些进程则要求写操作,把只想读的进程称为“读者”,而把要求写的进程称为“写者”。
2.对读写操作的限制条件?
- 写-写互斥,即不能有两个写者同时进行写操作。
- 读-写互斥,即不能同时有一个线程在读,而另一个线程在写。
- 读-读允许,即可以有一个或多个读者在读。
二、写者优先方案
1.注意的问题:
(1)一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。
(2)当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等待到已在共享文件的读进程执行完毕则立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。
(3)有写者在写的时候,新来的写者必须等待。
2.实现过程(代码讲解):
上面提到,读者在申请读操作时,若有写者在等待,那么它必须等到没有写者的时候,才能开始读操作。所以,这里要设置一个变量来记录处于等待状态的写者,当这个变量=0时,读者才可以进行读操作。
三、读者优先方案
当前若有写者在排队,那么在写者后来的读者会直接进入读者队列,相当于排到写者的前面去了,直到后面没有读者进入,并且当前读者读完的时候,写者才能写。
四、读者写者公平方案
读写优先级相同
当写者在排队时,后面来的读者会被阻塞,就是不让它们插队,当前读者读完以后就立马轮到写者写了。