📜  门| Gate IT 2007 |第54章

📅  最后修改于: 2021-06-29 00:07:28             🧑  作者: Mango

古典读者问题中的同步可以通过使用信号量来实现。在以下针对读写器问题的不完整代码中,两个二进制信号量互斥锁和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的值(按此顺序)是
(A)信号(互斥),等待(wrt),信号(wrt),等待(互斥)
(B)信号(wrt),信号(互斥量),等待(互斥量),等待(wrt)
(C)等待(wrt),信号(互斥量),等待(互斥量),信号(wrt)
(D)信号(互斥),等待(互斥),信号(互斥),等待(互斥)答案: (C)
说明:对于S1:如果readcount = 1 =>读取器正在读取,则不必执行任何写入器。因此,S1必须为wait(wrt)
对于S2:在将readcount更新后,将其设置为1,以便其他读者可以进入条目部分。允许多次读数。 (一次只能在输入部分中输入1)因此signal(mutex)
对于S3:现在一次只能在退出部分中使用一个进程,并使用信号量互斥体来实现它(一次只能在退出部分中使用1个)。因此,wait(mutex)
对于S4:如果readcount为零,即没有读取器正在读取,则表示最后一个读取器已完成读取,它应该解锁资源,以便任何等待它的写入器都可以使用它。因此signal(wrt).S1,S2,S3的上述值和S4只是实现了第一个读者作者问题。

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

该解决方案由Nitika Bansal提供

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