读者-写者问题实现真正的写优先
主要思想是设置一一个变量记录写者的数量,只有当写者数量为0时读者才可以进行读操作。伪代码如下。
作者水平有限,主要思想如上,伪代码实现的具体细节可能不够严谨,如有错误,欢迎斧正!
semaphore rw=1; //用于实现对共享文件的互斥访问
int count=0; //记录当前有几个读进程在访问文件
semaphore mutex=1; //用于保证count变量的互斥访问
semaphore w=1; //用于实现写优先
int wcount=0; //用于记录写进程的数量
semaphore wmutex=1; //用于保证wcount变量的互斥访问 writer(){while(1){p(wmutex);if(wcount==0)p(w);wcount++;v(wmutex);p(rw);写文件... p(wmutex);v(rw);wcount--;if(wcount==0)v(w);v(wmutex);}
}reder(){while(1){while(wcount==0);p(mutex);if(count==0)p(rw);count++;v(mutex);读文件...p(mutex);count--;if(count==0)v(rw);v(mutex); }
}