经典案例:读者写者模型
读者写者模型
不成熟方案
P_Reader
**********************
P(mutex_Blackboard)
。。。。
从黑板读信息
。。。。
V(mutex_Blackboard)
**********************
P_Writer
**********************
P(mutex_Blackboard)
。。。。
向黑板写信息
。。。。
V(mutex_Blackboard)
**********************
读者优先方案
P_Reader
**********************
P(mutex_ReaderCount)
ReaderCount++
If (ReaderCount==1)
P(mutex_Blackboard)
V(mutex_ReaderCount)
**********************
。。。。
从黑板读信息
。。。。
**********************
P(mutex_ReaderCount)
ReaderCount--
If (ReaderCount==0)
V(mutex_Blackboard)
V(mutex_ReaderCount)
**********************
P_Writer
**********************
P(mutex_Blackboard)
。。。。
向黑板写信息
。。。。
V(mutex_Blackboard)
**********************
读者写者公平方案
P_Reader
**********************
P(mutex_Register)
P(mutex_ReaderCount)
ReaderCount++
If (ReaderCount==1)
P(mutex_Blackboard)
V(mutex_ReaderCount)
V(mutex_Register)
**********************
。。。。
从黑板读信息
。。。。
**********************
P(mutex_ReaderCount)
ReaderCount--
If (ReaderCount==0)
V(mutex_Blackboard)
V(mutex_ReaderCount)
**********************
P_Writer
**********************
P(mutex_Register)
P(mutex_Blackboard)
。。。。
向黑板写信息
。。。。
V(mutex_Blackboard)
V(mutex_Register)
**********************
写者优先方案
P_Reader
**********************
P(mutex_enhance)
P(mutex_Register)
P(mutex_ReaderCount)
ReaderCount++
If (ReaderCount==1)
P(mutex_Blackboard)
V(mutex_ReaderCount)
V(mutex_Register)
V(mutex_enhance)
**********************
。。。。
从黑板读信息
。。。。
**********************
P(mutex_ReaderCount)
ReaderCount--
If (ReaderCount==0)
V(mutex_Blackboard)
V(mutex_ReaderCount)
**********************
P_Writer
**********************
P(mutex_WriterCount)
WriterCount++
If (WriterCount==1)
P(mutex_Register)
V(mutex_WriterCount)
**********************
P(mutex_Blackboard)
。。。。
向黑板写信息
。。。。
V(mutex_Blackboard)
**********************
P(mutex_WriterCount)
WriterCount--
If (WriterCount==0)
V(mutex_Register)
V(mutex_WriterCount)
**********************
拓展的读者写者模型
读者互助组
变形一:互相帮忙的读者1组和互相帮忙的读者2组, 读者1组和读者2组不会同时读黑板,但同一组中的读者可以同时读黑板,并且会插队(后面)
P_Reader1
**********************
P(mutex_Reader1Count)
Reader1Count++
If (Reader1Count==1)
P(mutex_Blackboard)
V(mutex_Reader1Count)
**********************
。。。。
从黑板读信息
。。。。
**********************
P(mutex_Reader1Count)
Reader1Count--
If (Reader1Count==0)
V(mutex_Blackboard)
V(mutex_Reader1Count)
**********************
P_Reader2
**********************
P(mutex_Reader2Count)
Reader2Count++
If (Reader2Count==1)
P(mutex_Blackboard)
V(mutex_Reader2Count)
**********************
。。。。
从黑板读信息
。。。。
**********************
P(mutex_Reader2Count)
Reader2Count--
If (Reader2Count==0)
V(mutex_Blackboard)
V(mutex_Reader2Count)
**********************
写者互助组
P_Writer1
**********************
P(mutex_Writer1Count)
Writer1Count++
If (Writer1Count==1)
P(mutex_Register)
V(mutex_Writer1Count)
**********************
P(mutex_Blackboard)
。。。。
向黑板写信息
。。。。
V(mutex_Blackboard)
**********************
P(mutex_Writer1Count)
Writer1Count--
If (Writer1Count==0)
P(mutex_Register)
V(mutex_Writer1Count)
**********************
P_Writer2
**********************
P(mutex_Writer2Count)
Writer2Count++
If (Writer2Count==1)
P(mutex_Register)
V(mutex_Writer2Count)
**********************
P(mutex_Blackboard)
。。。。
向黑板写信息
。。。。
V(mutex_Blackboard)
**********************
P(mutex_Writer2Count)
Writer2Count--
If (Writer2Count==0)
P(mutex_Register)
V(mutex_Writer2Count)
**********************