读者-写者问题
读者进程和写者进程共享一个文件,当两个或两个以上的读进程同时访问共享数据时不会产生副作用,但若某个写进程和其他进程(读进程或写进程)同时访问共享数据时则可能导致数据不一致的错误。
1、允许多个读者可以同时对文件执行读操作
2、只允许一个写者往文件中写信息
3、任一写者在完成写操作之前不允许其他读者或写者工作
4、写者执行写操作前,应让已有的读者和写者全部退出
分析
互斥关系:写者进程与写者进程,写者进程与读者进程
读者进程与读者进程不存在互斥关系。
semaphore rw=1; //用于实现对共享文件的互斥访问
int count = 0; //记录当前有几个读进程在访问文件
semaphore mutex = 1;//用于保证对count变量的互斥访问
void writer() {
while(1) {
P(rw); //写之前“加锁”
写文件…
V(rw)