P(write) 是P操作,就是write的值-1,就像P(mutex) P操作-1,V操作+1,
读者:
BEGIN
P(mutex);//上锁,互斥其他读者,为了保证只有一个读者改变read_count
read_count:=read_count+1;
IF read_count=1 //第一个读者,则上写者的锁,保证读得时候不能让写者写
THEN P(writer)
V(mutex);
读文件;
P(mutex); //同上,互斥读者,为了保证只有一个读者改变read_count
read_count:=read_count-1;
IF read_count=0 //最后一个读者,signal写者,可以写
THEN V(write);
V(mutex);
END;
写者:
BEGIN
P(write);
写文件;
V(write);
END;
q