多個進程共享一個數據區,這些進程分爲兩組: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路由代碼使用了讀-寫鎖,讀路由表的狀況比更新路由表的狀況多得多。基礎