多个进程共享一个数据区,这些进程分为两组:code
若是读者执行:进程
若是写者执行:资源
伪代码:路由
void reader(void){ while(TRUE){ P(mutex); rc = rc + 1; //只有第一个读者须要执行P(W) if(rc == 1) P(w); v(mutex); //读操做 P(mutex); rc = rc + 1; //只有最后一个读者须要V(w) if(rc == 0)V(w); V(mutex); } } void writer(void){ while(TRUE){ P(w); //写操做 V(w); } }
临界区:各个进程中对某个临界资源实施操做的程序片断。it
经过rc,保证读者能够同时读操做,而不要屡次执行PV操做。除此以外的操做都是创建在在写不可读,在读不可写的基础上的。同时不存在多个写者的问题。class
Linux的IPX路由代码使用了读-写锁,读路由表的状况比更新路由表的状况多得多。基础