如上图所示在startRead()函数中,我们先使用互斥锁防止两个或者两个以上的进程同时进行读操作,假设读进程1获得锁,现在它需要判断就绪队列和等待队列中是否还有写进程,如果有写进程那么当前获得锁的读进程执行okToRead.wait()操作,将当前读进程放入等待队列并且释放锁,知道条件变量满足条件,则将读进程唤醒并放入就绪队列中等待调度,此时就需要执行WR--操作,因为等待队列中少了一个读进程。(很重要的是我们需要记住我们有很多读进程都使用同一个程序,所以当前读进程进入等待序列而且当前读进程的startRead()方法不能执行下去了,而其他读进程StartRead()方法可以执行,因为我们的wait方法中释放了锁,所以我们的思维不能局限在单个进程while()循环走不出去的情况,)下面继续判断
wait(){ lock.release(); //读进程进入就绪队列 lock.require(); //获得锁,此时再判断while循环是否满足,如果满足那么退出循环 }
同理write方法也是一样的分析