操作系统之进程管理:14、读者-写者问题

    科技2022-07-20  112

    14、读者-写者问题

    问题描述解题思路注意

    问题描述

    解题思路

    分析: 无论是写写还是读写互斥都是对文件的互斥访问,需要一个互斥信号量rw,在读和写的前后加入互斥访问

    问题1:但是这样的话无法实现多个读者访问文件的操作;当reader1读时,rw=0;在reader1读的过程中切换到reader2读时,因为rw=0而阻塞。 解决1:用一个计数变量count=0来对读者进程计数,当第一个读者进程开始时加锁,最后一个读者进程结束时解锁

    问题2:当俩个读者进程并发执行时,r1判断完count=0后切换到r2,此时r2认为count=0,加锁;在切换回r1继续执行加锁,这样r1进程就会被阻塞 解决2:产生该问题的原因是由于原因在于对count 变量的检查和赋值无法一气呵成;为了实现一气呵成的操作,需要设置一个互斥的信号量mutex=1来互斥的访问count变量

    问题3:当一直有读者进程到来时,写进程就会“饿死” 解决3:在设置一个互斥的信号量w=1用于实现“读写公平”(或者说“写优先”’) 分析: 1、读者1–>读者2:r1读执行p(w)后r2阻塞;当r1执行完V(w),后r1读,r2唤醒;俩个进程并发读 2、写者1–>写者2:w1写,w=0,w2在P(w)阻塞 3、写者1–>读者1:w1执行,w=0;读者阻塞在P(w) 4、读者1–>写者1–>读者2:r1读,rw=0,w=1;w1写,w=0,p(rw)阻塞;r2读,P(w)阻塞;当r1结束后,w1唤醒;但r2依旧阻塞;这样就实现了写进程到来后,读完立即执行写进程。 5、写者1–>读者1–>写者2:w1写,w=0;r1读,在p(w)阻塞;w2写,p(w)阻塞;w1写,由于读1先入队,所以执行r1读,w2依旧阻塞;因此,其实他应该叫做“读写公平”比“写优先”更合适。

    注意

    Processed: 0.009, SQL: 8