读者优先
readcount = 0 表示读者数量
mutex = 1 用于对writecount资源加锁
w = 1 用于对资源操作加锁
Reader() {
P(mutex)
readcount++
if(readcount==1)
P(w)
V(mutex)
...dosomething
P(mutex)
readcount--
if(readcount==0)
V(w)
V(mutex)
}
Writer() {
P(w)
...dosomething
V(w)
}
公平竞争
readcount= 0 表示读者数量
mutex = 1 用于对writecount资源加锁
x = 1 用于公平竞争,即取得获取资源的资格
w = 1 用于对资源操作加锁
Reader(){
P(x)
P(mutex)
readcount++
if(readcount==1)
P(w)
V(mutex)
V(x)
...dosomething
P(mutex)
readcount--
if(readcount==0)
V(w)
V(mutex)
}
Writer(){
P(x)
P(w)
...dosomething
V(w)
V(x)
}
写者优先
writecount = 0 表示读者数量
readcount = 0 表示写者数量
mutex1 = 1 用于对writecount资源加锁
mutex2 = 2 用于对readcount资源加锁
x = 1 用于保证在写进程执行时,后续的写进程优先执行
z = 1 用于保证在一个读进程申请资源加锁操作时,后续的读进程与写进程优先执行写进程
w = 1 用于对资源操作加锁
Reader() {
P(z)
P(x)
P(mutex2)
readcount++
if(readcount==1)
P(w)
V(mutex2)
V(x)
V(z)
...dosomething
P(mutex2)
readcout--
if(readcount==0)
V(w)
V(mutex2)
}
Writer() {
P(mutex1)
writecount++
if(writecount==1)
P(x)
V(mutex1)
P(w)
...dosomething
V(w)
P(mutex1)
writecount--
if(writecount==0)
V(x)
V(mutex1)
}