📜  门|门 IT 2007 |第 54 题

📅  最后修改于: 2021-09-24 05:51:06             🧑  作者: Mango

经典读者和作者问题中的同步可以通过使用信号量来实现。在下面的读写器问题的不完整代码中,使用了两个二进制信号量mutex和wrt来获取同步

wait (wrt)
writing is performed
signal (wrt)
wait (mutex)  
readcount = readcount + 1
if readcount = 1 then S1
S2
reading is performed
S3
readcount = readcount - 1
if readcount = 0 then S4 
signal (mutex)

S1、S2、S3、S4 的值(按此顺序)是
(一)信号(mutex)、等待(wrt)、信号(wrt)、等待(mutex)
(B)信号(wrt)、信号(mutex)、等待(mutex)、等待(wrt)
(C)等待(wrt)、信号(mutex)、等待(mutex)、信号(wrt)
(D)信号(mutex)、等待(mutex)、信号(mutex)、等待(mutex)答案: (C)
解释:对于 S1:如果 readcount =1 => reader 现在正在读取,那么不需要 writer 执行。因此,S1 必须等待(wrt)
对于 S2: readcount 更新后,设为 1,以便其他读者进入入口部分。允许多次读数。 (一次只能有 1 个在入口部分)因此信号(互斥)
对于 S3:现在一次只能有一个进程在退出部分,并且信号量互斥用于实现它(一次只能有 1 个进程在退出部分)。因此等待(互斥)
对于 S4:如果 readcount 为零,即没有读取器正在读取,则表示最后一个读取器已完成读取,它应该解锁资源,以便任何等待它的写入器都可以使用它。因此信号(wrt)。以上 S1、S2、S3 的值, 和 S4 都只是实现了第一读写器问题。

参考:
读者-作者-问题集1-介绍-和-读者-偏好-解决方案/
https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/6_Synchronization.html

此解决方案由Nitika Bansal 提供

相关概念:
进程同步|Set1
互斥量与信号量
监视器
读者作家问题(维基百科)这个问题的测验